Sql ifadesi performansı gereksinimlerinizi karşılayamaz ve yürütme verimliliği sizi dayanılmaz kılar.Genel olarak aşağıdaki durumlar vardır.
Peki, yavaş performansın nedenini nasıl bulacağız?
dbo'dan * seçin.
Yukarıdaki ifadenin yürütülmesi genellikle yalnızca sonucu ve çalıştırılan satırların sayısını döndürür, bu yüzden onu nasıl analiz edersiniz ve optimizasyon ile optimizasyon olmaması arasındaki farkı nasıl anlarsınız?
İşte sizin için birkaç yöntem.
1. Yürütme süresini ve cpu kullanım süresini görüntüleyin
istatistik süresini ayarla
dbo'dan * seçin.
istatistik zamanını ayarla
Açtıktan sonra mesajda görebilirsiniz.
2. I / 0'da sorgunun işleyişini görüntüleyin
istatistikleri ayarla
dbo'dan * seçin.
istatistikleri ayarla io kapalı
İnfazdan sonra
Tarama sayısı: dizin veya tablo tarama süreleri
Mantıksal okuma: veri önbelleğinde okunan sayfa sayısı
Fiziksel okuma: diskten okunan sayfa sayısı
İleriye dönük okuma: Sorgu sırasında diskten önbelleğe yerleştirilen sayfa sayısı
lob mantıksal okuma: veri önbelleğinden, görüntü, metin, ntext veya büyük veri sayfalarının sayısını okuyun
Lob fiziksel okuma: diskten, görüntü, metin, ntext veya büyük veri sayfalarının sayısını okuyun
lob önceden okuma: sorgu işlemi sırasında diskten önbelleğe alınan görüntü, metin, ntext veya büyük veri sayfalarının sayısı
Fiziksel okumaların sayısı ve ön okumaların sayısı nispeten büyükse, indeks optimizasyon için kullanılabilir.
Bu içerikleri görüntülemek için sql ifadesi komutlarını kullanmak istemiyorsanız, yöntemler de var ve size daha basit bir tane öğreteceğim.
Sormak--- > > Sorgu seçenekleri --- > > ileri
Kırmızı dairedeki 2 tarafından seçildim, efekti denemek için sql ifadesindeki set istatistiklerini io / time on / off kaldırın. Oh evet, başardın. .
3. Yürütme planını, ayrıntılı yürütme planını görüntüleyin
Sorgu ifadesini seçin ve tıklayın
Sonra mesaja bakın, aşağıdaki lejant görünecektir
1. Gereksiz sütun ve satırları sorgulamadığınızdan emin olun.
2. Farklı anahtar kelimeyi dikkatli kullanın
Ayırt, bir alanı veya birkaç alanı sorgularken kullanılır; bu, yinelenen verilerin görünmesini önler ve sorguya optimizasyon etkileri getirir.
Bununla birlikte, çok sayıda sorgu alanı varsa, sorgu verimliliği büyük ölçüde azalacaktır.
Bu şekilden analiz edin:
Açıktır ki, cpu zamanı ve doluluk süresi farklı olan ifadeden farklı olmayan ifadeden daha yüksektir. Bunun nedeni, çok sayıda alan sorgulanırken, eğer farklı kullanılıyorsa, veritabanı motorunun verileri karşılaştırması ve yinelenen verileri filtrelemesi, ancak bu karşılaştırma ve filtreleme işlemi, sistem kaynaklarını ve cpu zamanını belirsiz bir şekilde işgal edecektir.
3. Union anahtar kelimesini dikkatli kullanın
Bu anahtar kelimenin ana işlevi, her bir sorgu ifadesinin sonuç kümesini bir sonuç kümesinde birleştirmek ve size geri döndürmektir. kullanım
< ifade 1'i seçin >
Birlik
< ifade 2'yi seçin >
Birlik
< ifade 3'ü seçin >
...
Birleşmeyi karşılayan ifade aşağıdakileri karşılamalıdır: 1. Sütun sayısı aynıdır. 2. Sütun sayısına karşılık gelen veri türleri uyumlu olmalıdır.
Uygulama süreci:
Seçme ifadelerini sırayla yürütün - > > Sonuç kümesini birleştir --- > > Sonuç kümesini sıralayın ve yinelenen kayıtları filtreleyin.
dan * seçin
((orde o left join orderproduct op on o.orderNum = op.orderNum)
iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id < 10000
Birlik
dan * seçin
((orde o left join orderproduct op on o.orderNum = op.orderNum)
iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id < 20000 ve p.id > = 10000
Birlik
dan * seçin
((orde o left join orderproduct op on o.orderNum = op.orderNum)
iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id > 20.000
---P.id buraya yazılabilir > 100 sonuç aynı çünkü filtreledik
---------------------------------- Üst ve alt cümleleri karşılaştırın ----------- ------------------------------
dan * seçin
((orde o left join orderproduct op on o.orderNum = op.orderNum)
op.proNum = p.productnum üzerinde iç birleştirme ürünü p
Bu, verimliliğin gerçekten düşük olduğunu, dolayısıyla gerektiğinde önlenmediğini gösterir. Aslında gerçekleştirdiği üçüncü kısım var: Sonuç kümesini sıralayın ve yinelenen kayıtları filtreleyin. Bunun iyi bir kuş olmadığını görebilirsiniz. Bununla birlikte, sonuç kümesi sıralanmamış ve filtrelenmemişse, açıkça verimlilik birleşiminkinden daha yüksektir, dolayısıyla sıralanmamış ve filtrelenmemiş anahtar kelimeler var mı? Cevap, evet, hepsi birleşimdir ve birleşim tümü birleşmeyi optimize etmek için kullanılabilir. .
4. Tabloda veri olup olmadığını belirleyin
üründen sayımı (*) seçin
üründen en iyi (1) kimliği seçin
Açıkçası aşağıdaki kazanır
5. Birleştirme sorgusunun optimizasyonu
Önce istediğiniz verilerin neye benzediğini bulmanız ve ardından hangi bağlantının kullanılacağına karar vermeniz gerekir ki bu çok önemlidir.
Çeşitli bağlantıların değerleri şunlardır:
dan * seçin
((OrderId'nin > 10000) o sol birleşik orderproduct op on o.orderNum = op.orderNum)
dan * seçin
(orde o sol join orderproduct op on o.orderNum = op.orderNum)
nerede o.OrderId > 10000
Bu, bağlantı tablosundaki veri miktarını azaltmanın verimliliği artırabileceğini gösterir.
Optimizasyon, en önemli şey, genellikle ifadeler, veritabanı alışkanlıkları ve yöntemler tasarlamanızdır. Eğer umursamıyorsanız, sabırla analiz etmeniz gerekir, ancak analiz süreci anlayışınıza, ihtiyaçlarınıza ve bilgi seviyenize bağlıdır.
DBA hakkında daha fazlasını daha sonra paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~