Aracılığıyla paylaş


Sorgu önerileri ayarlama

Bazı sorgular, diğerlerine göre daha fazla kaynak tüketir.Örneğin, kümeleri ve benzersiz olmayan yan tümceleri her zaman kaynak yoğun olduğu içeren büyük döndüren sorgular neden.No degree of query optimizer intelligence can eliminate the resource cost of these constructs when compared to a less complex query.SQL Server uses the optimal access plan, but query optimization is limited by what is possible.

Yine de, sorgu performansını artırmak için şunları yapabilirsiniz:

  • Daha fazla bellek ekleyin.Bu çözüm sunucu birçok karmaşık sorguları çalıştırır ve birkaç sorgu yavaş yürütmek özellikle yararlı olabilir.

  • Birden çok işlemci kullanın.Birden çok işlemci izin Veritabanı Altyapısı yapmak için paralel sorgular kullanmakDaha fazla bilgi için bkz: Paralel Sorgu İşleme.

  • Sorguyu yeniden yazın.Aşağıdaki sorunları dikkate alın:

    • Sorgu imleç kullanıyorsa, imleç sorgu ya da daha verimli imleç türü kullanılarak yazılabilir olmadığını belirlemek (gibi salt ileri hızlı) veya tek bir sorgu.Tek sorgular genelde imleç işlemlerini tamamen geride.Çünkü bir küme imleç deyimleri ise genellikle içinde dış döngünün her satırda işlenir bir kez bir iç deyim kullanarak bir dış döngü işlemi düşünün yerine bir group by veya servis talebi deyim ya da bir alt sorgu kullanma.Daha fazla bilgi için bkz: İmleç türleri (veritabanı altyapısı) ve Sorgu Fundamentals.

    • Bir uygulama bir döngü kullanır, döngünün sorgu içinde yerleştirme düşünün.Genellikle birçok kez Yürütülmüş ve turda uygulamasını çalıştıran bilgisayar arasındaki ağ gerektirir bir parametreli sorgu içeren bir döngü içinde bir uygulama olduğu ve SQL Server.Bunun yerine, geçici tablo kullanarak tek, daha karmaşık bir sorgu oluşturun.Yalnızca tek bir ağ turda, gereklidir ve sorgu iyileştiricisi daha iyi tek sorgu daha iyi duruma getirebilirsiniz.Daha fazla bilgi için bkz: Yordam Transact-sql ve Transact-SQL Değişkenleri.

    • Birden çok diğer ad aynı sorgu içinde tek bir tablo için dizin kesişim benzetimini yapmak için kullanmayın.Bu uzun gerek yok, çünkü SQL Server otomatik olarak dizin kesişim dikkate alır ve yapabilirsiniz aynı birden çok dizin kullanımını tablo aynı sorgu.Örnek sorgu göz önünde bulundurun:

      SELECT * FROM lineitem 
      WHERE partkey BETWEEN 17000 AND 17100 AND
          shipdate BETWEEN '1/1/1994' AND '1/31/1994'
      

      SQL Serverdizinler üzerinde hem de yararlanabilir partkey ve ÖdemeTarihi sütunlar ve bir karma eşleşme dizin kesişim elde etmek için iki alt kümeleri arasında gerçekleştirin.

    • Parameterizasyonunu sorgu yürütme planları yeniden önbelleğe alınan sorgu kullanılmasına izin vermek için kullanın.Yoksa bir küme sorguları aynı sorgu karma ve sorgu planı karma var, tek parametreli sorgu oluşturarak performansı iyileştirebilir.Çağırma parametreleri yerine, hazır bilgi değerleri ile birden çok sorgu içeren bir sorgu yeniden önbelleğe alınan sorgu yürütme planı kullanılmasına izin verir.Daha fazla bilgi için bkz: Bulma ve benzer sorgular sorgu ve sorgu kullanarak ayarlama karmaları Plan ve Yeniden yürütme planı önbellekleme ve.

      Uygulamayı değiştirebilir, benzer bir sonuç elde etmek için zorunlu parameterizasyonunu ile şablon planı kılavuzları kullanabilirsiniz.Daha fazla bilgi için bkz: Plan kılavuzları kullanarak sorgu parameterizasyonunu davranışı belirtme.

    • Yapın sorgu ipuçları yalnızca gerekli olduğunda kullanın.Önceki sürümleri karşı yürütülen ipuçlarını kullanarak sorgular SQL Server belirtilen ipuçları test edilecek.İpuçları engelleyebilirsiniz sorgu iyileştiricisi karşı daha iyi bir yürütme planı seçme.Daha fazla bilgi için bkz: SELECT (Transact-SQL).

  • Yakalama, depolamak ve sorguları için sorgu yürütme planları üzerinden karşılaştırmak için query_plan_hash kullanın saat.Örneğin, sistem değiştirdikten sonra yapılandırma, kendi özgün sorgu planı karma değerleri için görev açısından kritik sorguları için sorgu planı karma değerleri karşılaştırabilirsiniz.Sorgu planı karma değerler farkları öğrenebilirsiniz, sistem yapılandırma önemli sorguları için güncelleştirilmiş sorgu yürütme planları içinde değişiklik sonuçlandı.Ayrıca, iyi bir performans sağlamak için bilinen, temel sorgu planı karma değerden, sys.dm_exec_requests, sorgu planı karma değeri farklıysa, geçerli uzun süre çalışan sorgu için yürütme durdurmak karar verebilirsiniz.Daha fazla bilgi için bkz: Bulma ve benzer sorgular sorgu ve sorgu kullanarak ayarlama karmaları Plan.

  • Olun kullanımı sorgu idarecisi yapılandırma seçeneği.The query governor configuration option can be used to prevent system resources from being consumed by long-running queries.Varsayılan olarak, tüm sorguları izin vermek için seçenek küme yürütmek, aldıkları ne olursa olsun.Ancak, küme sorgu idarecisi saniye tüm sorgular için tüm bağlantıları veya yalnızca belirli bir bağlantı için sorguları yürütmek için izin verilen en fazla sayısını sınırlamak için.Sorgu süresine sorgu tahmini maliyetini temel alan yerine, çünkü gerçek geçen saat, tüm çalışma - yoksaat yük.Önceden tanımlanmış bazı sınır düğmelerini tıklatana kadar çalıştırmak yerine başlamadan önce uzun süre çalışan sorguları durdurur.Daha fazla bilgi için bkz: sorgu idarecisiMaliyet sınırı seçeneği ve set QUERY_GOVERNOR_COST_LIMIT (Transact-sql).

  • Planı önbellekten sorgu planları yeniden kullanımı en iyi duruma getirme.The Veritabanı Altyapısı caches query plans for possible reuse.Bir sorgu planı önbelleğe alınır, onu hiçbir zaman yeniden kullanılabilir.Bunun yerine, her saat bunlar çalıştırılır, önbelleğe alınmamış sorgu planları derlenmeli, sonuçlar performansa içinde.Aşağıdaki Transact-SQL set deyim seçenekleri önbelleğe alınan sorgu planlarını yeniden kullanılmasını engellemek.A Transact-SQL bunlar içeren toplu iş iş açık açık seçeneklerini ayarlama, sorgu planları bunlar ile derlenen aynı toplu iş iş iş ile paylaşamaz seçeneklerini ayarlama kapalı:

    SET ANSI_NULL_DFLT_OFF

    SET ANSI_NULL_DFLT_OFF

    SET ANSI_NULLS

    SET ANSI_PADDING

    SET ANSI_WARNINGS

    SET ARITHABORT

    SET CONCAT_NULL_YIELDS_NULL

    SET DATEFIRST

    SET VBLONGDATE

    SET FORCEPLAN

    DİL AYARLAMA

    SET NO_BROWSETABLE

    SET NUMERIC_ROUNDABORT

    SET QUOTED_IDENTIFIER

    METİN BOYUTU AYARLAMA

     

    Buna ek olarak, ANSI_NULLS ANSI_NULL_DFLT_OFF, ANSI_PADDING, ANSI_WARNINGS, CURSOR_CLOSE_ON_COMMIT, IMPLICIT_TRANSACTIONS ve set QUOTED_IDENTIFIER seçeneklerini değiştirmek için kullanılabilir çünkü set ANSI_DEFAULTS seçenek önbelleğe alınan sorgu planlarını yeniden etkiler.set ANSI_DEFAULTS ile değiştirilebilir set seçeneklerinin çoğu sorgu planları yeniden etkileyebilir set seçenekleri olarak listelendiğine dikkat edin.

    Bunlardan bazıları değiştirme aşağıdaki yöntemleri ile seçeneklerini ayarlayın:

Not

Sorgu planları seçeneklerini ayarlama tarafından neden, yeniden derlemelerinde önlemek için bağlantı sırasında seçeneklerini ayarlama kurmak ve bağlantı saat için değişmez emin olun.Dizin oluşturulmuş görünümler veya dizinler hesaplanan sütunlar üzerinde kullanmak için bazı seçeneklerini küme için belirli değerleri ayarlamanız gerekir.Daha fazla bilgi için bkz: Sonuçları etkileyen seçeneklerini ayarlama.

Ayrıca bkz.

Başvuru

Kavramlar