2010-11-02 19 views

cevap

11

Genellikle bu gibi çalışıyor:

 
    SQL String ---[Optimizer]---> Execution Plan ---[Execution]---> Result 

Ben şahsen bir derleyici çok benzer bir şey olarak optimize edici (sorgu planlayıcısı) görmek isterler. SQL deyimini daha kolay yürütülebilir bir şeye dönüştürüyor. Ancak, çip üzerinde doğuştan yürütülebilir değil. Bu "derleme" oldukça pahalıdır - tıpkı C++ kodunu derlemek gibi. Farklı yürütme değişkenlerinin değerlendirildiği kısım budur; kullanılacak dizini ekleme sırası, vb. Bu mümkün olduğunda bağlama parametreleri kullanarak Bundan kaçınmak için iyi bir uygulamadır.

yürütme planı

sonra veritabanı tarafından yürütülmesi için alınır. Ancak, strateji zaten sabittir. Yürütme sadece bunu yapıyor. Bu bölüm, SQL değil, yürütme planını yorumlamaktır. derleme daha kolay yorumlanabilir bir ikili forma kaynak kodunu döner nerede Sonuçta

, bu, bir şekilde, Java veya .NET benzer. Bu argüman için JIT'i yoksayarsak, bir Java programının yürütülmesi bu meta-kodu yorumlamaktır.


benim free eBook "Use The Index, Luke" içinde using bind parameters for (Oracle) performance faydasını açıklamak için bu şekilde kullandık.

+0

üzerinde farklı noktalarda olduğundan Yanlış olduğumda lütfen beni düzeltin: Optimizer'ın, yürütme planı için önbellek kullanabileceğini eklemek isteyebilirsiniz; – bvh

0

Modern SQL ortamlarında, daha iyi bir plan elde ederseniz, yeniden kullanmak istediğiniz veya varolan derlenmiş bloğu veya tüm aşamaları yeniden başlatıp başlatmayacağınız belli bir iş akışında karar verdiğiniz aşamalı bir yaklaşımdır. argümanların belirli bir kombinasyonu.

Ben sonuç (daha sonra çalıştırılabilir kod için derlenmiş) (yeniden) compiletime ve icra zaman arasında kapalı bir ödeme olduğunu düşünüyorum. Sorgunun karmaşıklığına bağlı olarak, çalışma zamanında verilen argümanların özelliklerini uygulayan bir yeniden derleme, mevcut kodun yürütme süresi, öngörülebilir minimum kaynak tüketimi (örneğin, iki satır ve geri dönüş) nedeniyle zaten düşükse, çabaya değmeyebilir.

Daha yüksek sorgu karmaşıklığı ve tahmini kaynak tüketimi (çok sayıda büyük tablo, önemli dizin seçimi, olası tablo taraması) ile istatistiklerin ayrıntı düzeyi devreye girer. yani, seçiciliğiniz varsa, aykırı değerler, aralık seçicilikleri, avg. alan boyutları, fiziksel harita boyutları, vb. optimizer, farklı argüman kümeleriyle çok farklı sonuçlara ulaşabilir.

10 ++ değişken argümanlarla 25-birleşim için en iyi planın hesaplanması zamanını ve kaynaklarını alabilir. Sonuç, her şey için bir sürümden daha hızlı ve daha verimli ise, bu çabaya değer. Özellikle verilen argümanlar seti oyun değiştiricileri içerebilir ve sorgu sık sık tekrardan yürütülür. Nihayet

, her satıcı ile değişebilir sizin kilometre;)