Aracılığıyla paylaş


Zayıf sorgu performans sorun giderme: Önem düzeyi tahmin

sorgu iyileştiricisi, SQL Server Maliyet tabanlıdır.Yani en düşük tahmini olan sorgu planları seçer yürütmek için maliyet işleniyor.sorgu iyileştiricisi İki ana etkene dayalı bir sorgu planı yürütme maliyetini belirler:

  • Her biri işlenen satır sayısı düzey , plan kardinalite başvurulan bir sorgu planı.

  • Sorguda kullanılan işleçler tarafından dikte edildiği algoritması maliyet modeli.

İlk etken, kardinalite, bir maliyet modeli ikinci faktörü girdi parametresi kullanılır.Bu nedenle, geliştirilmiş kardinalite tahmini maliyetleri için daha iyi müşteri adayları ve dolayısıyla, daha hızlı yürütme planları.

SQL Server öncelikle dizin veya istatistikleri, el ile veya otomatik olarak oluşturulduğunda, oluşturulan histogramlar dan cardinalities tahmin eder.Bazı durumlarda, SQL Server de kullanır kısıtlama bilgi ve mantıksal yeniden sorgular belirleme kardinalite.

Aşağıdaki durumlarda, SQL Server olamaz, doğru olarak hesaplamak cardinalities.Bu hassasiyetli sorgu planları neden olabilir yanlış maliyet hesaplamalarını neden olur.Sorgularda bu yapıları önleme, sorgu performansını artırabilir.Bazı durumlarda, alternatif sorgu formulations veya diğer önlemleri mümkün ve bu iþaret edildiði.

  • Aynı farklı sütunlar arasında karşılaştırma işleçleri kullanan yüklemler sorgularla tablo.

  • İşleçler ve aşağıdakilerden herhangi birini kullanan yüklemler sorgularla doğrudur:

    • Hiçbir istatistikleri sütunlar vardır üzerinde işleçler her iki tarafındaki ilgili.

    • Dağıtım istatistik değerlerini tek tip olduğu halde son derece seçici değeri küme sorgu yararlanılabileceğini.Bu durum eşitlik (=) işlecini dışında bir işleç olarak, özellikle de doğru olabilir.

    • Yüklemi değil kullanır eşit (! =) karşılaştırma işleç veya mantıksal değil işleç.

  • Herhangi birini kullanan sorguları SQL Server yerleşik işlevler veya bir skaler değerli, kullanıcı tanımlı işlev, bağımsız değişken ise sabit bir değer değildir.

  • Dize bitiştirme işleç veya birleştirme sütunları aritmetik ile ilgili sorgulamalar.

  • Değerleri sorgunun derlenmiş ve en iyi duruma getirilmiş bilinen değişkenleri karşılaştırmak sorgular.

Bu tür sorgu performansını artırmak denemek için aşağıdaki önlemleri kullanılabilir:

  • Sorguya dahil sütunları kullanışlı dizinler veya istatistikleri oluşturmak.Daha fazla bilgi için bkz: Dizinler tasarlama ve İstatistikler sorgu performansını artırmak için kullanma.

  • Hesaplanan sütunlar kullanma ve karşılaştırma veya aritmetik işleçler karşılaştırmak veya iki veya daha çok sütunu birleştirme sorgu kullanıyorsa, sorguyu yeniden yazmayı düşünün.Örneğin, aşağıdaki sorguyu iki sütundaki değerleri karşılaştırır:

    SELECT * FROM MyTable
    WHERE MyTable.Col1 > MyTable.Col2
    

    Performans geliştirilmiş hesaplanan sütun eklerseniz, Col3 için MyTable arasındaki farkı hesaplar Col1 ve Col2 (Col1 eksi Col2).Daha sonra sorguyu yeniden yazın:

    SELECT * FROM MyTable
    WHERE Col3 > 0
    

    Belki performansı daha fazla bir dizin oluşturmak, MyTable.Col3.