PostgreSQL - Sorgu Optimizasyonu

İçindekiler
Çoklu yaptığımızda sorguları Karmaşık bir sistemde çoğu zaman veritabanı düzeyinde optimum performansa sahip olmak için uygun yolu seçmeyiz, mevcut teknolojik ilerleme ve sunucularımızda sıklıkla gördüğümüz bilgi işlem gücü ile veritabanı optimizasyonunun geçmişte kaldığını düşünebiliriz.
Bu, ekipmanın gücündeki ilerlemeye rağmen, gerçeklerden daha fazla olamazdı, veritabanları uygulamaların performansı için temeldir, bu nedenle iyi yazılmış ve yüksek düzeyde optimize edilmiş bir sorgu, birkaç saniyelik yük anlamına gelebilir. sistem, bunu eşzamanlı kullanıcı sayısıyla çarparsak, maliyetin ve gücün nasıl boşa harcandığını görürüz.
Sorguları Optimize Et
Veritabanlarımızın performansını iyileştirmenin en iyi yolu, iyi yazılmış sorgularla başlamaktır, çoğu zaman sorguların olması gerektiği kadar optimize edilmediğinden iyi yazılmadığını görürüz, bunun birçok nedeni vardır, bunlardan biri kod bilinci olmadan yeniden kullanımdır; Bununla, bir noktada bizim için çalışan bir sorgu yaparsak, şunu kastediyoruz: sol yönden katılım Danışılacak tabloların sayısını arttırırken, değiştirirken ve bazı maddeleri değiştirirken uygulamaya devam edeceğiz. iç birleşim Yolu kısaltabilir ve işlemci tüketiminden tasarruf sağlayabilir.
SQL, okunması oldukça kolay olmasına rağmen, en iyi ve en kötü şekilde çalışan bir şeyi yapmamıza izin veren birçok yönü ve birçok varyasyonu olan bir dildir, çözümümüzün ait olup olmadığını nasıl belirleyeceğimizi bilmek bize bağlıdır. bir kategori veya diğer.
Doğru yolda olduğumuzu bilmek için en önemli şeylerden biri güncellenmektir, yani SQL'de kodlamaya devam edemeyiz. PostgreSQL sanki içinde olduğumuz ilk versiyonmuş gibi sürüm 9.
Alt sorguları Kullanma Hakkında
Bu, yaptığımız en yaygın hatalardan biridir ve sorguyu, nihai bir sonuç elde edene kadar bir araya getirdiğimiz bir dizi parça olarak düşünmemizdir, ancak bu davranış, veritabanımızın performansı üzerinde yüksek bir etkiye sahiptir.
Bu tipik davranışa bir örnek görelim:
 Trakt_id SEÇİN, (SAYI SEÇİN (*) cenus.facts F NEREDE F.tract_id = T.tract_id olarak) Num_facts olarak, (SAYI SEÇ (*) census.lu_fact_types Y NEREDE Y.fact_type_id IN olarak (nüfus sayımından fact_type_id SEÇİN. gerçekler F NEREDE F.tract_id = T.tract_id)) num_fact_types FROM census.lu_tracts As T; 

Şimdi, grafiği görürsek AÇIKLAMAK Bu sorgudan, bunu bu şekilde yapmanın ne kadar pahalı olduğunu anlayacağız:

BÜYÜT

Gördüğümüz gibi, verimsiz bir şekilde taşınması gereken tüm veriler dışında, bu sorguda darboğaz olan birkaç noktamız var, bunun için onu daha optimal bir şekilde yeniden yazacağız ve yeni bir grafikle karşılaştıracağız. AÇIKLAMAK.
 SELECT T.tract_id, COUNT (f.fact_type_id) Num_facts, COUNT (DISTINCT fact_type_id) olarak num_fact_types FROM census.lu_tracts Olarak T SOL olarak JOIN census.facts F ON T.tract_id = F.tract_id GROUP BY T.tract_id 

Sorgumuzun bu yeni versiyonunda alt sorguları kullanmaktan kaçınıyoruz, bunun yerine bir eşdeğerini yapıyoruz. sol yönden katılım Y gruplandırmakGrafiği görürsek farkı anlayabiliriz.

BÜYÜT

Sonucumuzu elde etmenin yolunun nasıl çok daha kısa olduğunu ve bu da bize daha yüksek bir performans sağladığını görebiliriz, bununla, çalışma araçlarımızın alt sorgularını hariç tutmamız gerektiği anlamına gelmiyor, daha ziyade bunların olabileceğinin farkında olmamız gerekiyor. şu anda önerebileceğimiz şey için daha iyi yollar var.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave