Veritabanı optimizasyonu denince geliştiriciler genellikle sorguları yeniden yazmak, indeks eklemek, denormalizasyon yapmak gibi bilindik yöntemlere başvururlar. Ancak bazen yaratıcı yaklaşımlar çok daha büyük faydalar sağlayabilir. Bu makale, PostgreSQL'de alışılmadık optimizasyon tekniklerini ele alıyor ve özellikle constraint_exclusion parametresinin önemini vurguluyor.
Makalede, users adında bir tablonun ve plan sütununda sadece 'free' ve 'pro' değerlerine izin veren bir CHECK kısıtlamasının olduğu bir senaryo sunuluyor. Bir analistin yanlışlıkla 'Pro' (büyük P ile) planını sorgulaması durumunda, PostgreSQL'in tüm tabloyu taradığını gösteriyor. Oysa CHECK kısıtlaması sayesinde 'Pro' değerine sahip hiçbir satırın olamayacağı veritabanı tarafından garanti edilmektedir. Bu durum, gereksiz bir tam tablo taramasına yol açarak performansı olumsuz etkiliyor.
Bu sorunu çözmek için constraint_exclusion parametresini 'on' olarak ayarlamak gerekiyor. Bu ayar yapıldığında, PostgreSQL sorgu planı oluştururken kısıtlamaları dikkate alır. Böylece, 'Pro' gibi bir değerin CHECK kısıtlaması nedeniyle hiçbir zaman var olamayacağını anlayarak tablo taramasını tamamen atlar ve sorguyu anında boş bir sonuçla döndürür. Bu, özellikle büyük tablolarda yanlış veya geçersiz değerlerle yapılan sorgularda ciddi performans kazanımları sağlar ve veritabanı kaynaklarının daha verimli kullanılmasını sağlar.
PostgreSQL'de `constraint_exclusion` gibi az bilinen parametreleri kullanarak gereksiz tam tablo taramalarını önlemek, özellikle büyük veri kümelerinde sorgu performansını önemli ölçüde artırabilir.