Aracılığıyla paylaş


Sorgu öneriler ayarlama

Bazı sorgularda, diğerlerinden daha fazla kaynak kullanır.Örneğin, ayarlar ve WHERE yan benzersiz olmayan kaynak yoğundur dosyalarla içeren büyük döndüren sorgular sonuçlanır.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 , aşağıdakileri yapabilirsiniz:

  • Daha fazla bellek ekleyin.Bu çözüm, sunucu çok sayıda karmaşık sorgu çalışır ve bazı sorguların yavaş yürütmek özellikle yararlı olabilir.

  • Birden çok işlemcisi'ni kullanın.Birden çok işlemci izin Database Engine yapmak için paralel sorgular'ı kullanın. Daha fazla bilgi için bkz:Paralel sorgu işleme.

  • Sorguyu yeniden yazın.Aşağıdaki konuları göz önünde bulundurun:

    • Bir ya da bir daha verimli imleç türünü kullanarak imleci sorgu yazılabilir, sorguyu imleçler kullanıyorsa, belirlemek (hızlı ileri gibi - yalnızca) veya tek bir sorguda.Genellikle tek bir sorgu, imleç işlemlerini outperform.Bir GROUP BY veya durum deyim veya alt sorgu, bir imleç deyimleri genellikle dış döngünün her satırda bir iç deyim kullanılarak bir kez işlenir, bir dış döngü işlemi olduğundan düşünün.Daha fazla bilgi için bkz: Imleç türleri (Veritabanı Altyapısı) ve Sorgu temelleri.

    • Uygulama bir döngü kullanıyorsa, sorgu içinde döngü geçirmeden göz önünde bulundurun.Çoğu uygulama, birçok kez yürütülmüş ve yuvarlak başvuru uygulamayı çalıştıran bilgisayar arasındaki ağ gerektiren bir Parametreli Sorgu içeren bir döngü içerir ve SQL Server. Bunun yerine, geçici tablo kullanarak, daha karmaşık bir sorgu oluşturun.Tek bir ağ yuvarlak başvuru gereklidir ve sorgu iyileştiricisi tek sorguda 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ı sorguda tek bir tablo için dizin kesişim benzetimini yapmak için kullanmayın.Bunun nedeni daha uzun yok gerekli olabilir SQL Server otomatik olarak dizin kesişim dikkate alır ve yapabilirsiniz aynı tablodaki aynı sorguda birden çok dizinlerinin kullanın. Ö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 Server her ikisi de dizinlerde yararlanabilir partkey and shipDate sütun ve dizin kesişim elde etmek için iki alt kümeleri arasında eşleşen bir karma gerçekleştirin.

    • Sorgu parameterization yeniden önbelleğe alınan sorgu yürütme planları izin vermek için kullanın.Bir sorgu aynı sorgu sağlama ve sorgu planı karma, parametreli hale getirilmiş bir sorguya oluşturarak performansı.Bir sorgu parametresi birden çok sorgularla bir hazır bilgi değerleri yerine arama önbelleğe alınan sorgu yürütme planı yeniden kullanılmasını sağlar.Daha fazla bilgi için bkz: Bulma ve benzer sorgular, sorgu ve Query kullanarak ayarlama sağlamalarını planlanır. ve Yürütme planı önbelleğe alma ve yeniden.

      Uygulamayı değiştirebilir, benzer bir sonuç elde etmek için Zorlanmış parameterization ile şablon planı kılavuzları kullanabilirsiniz.Daha fazla bilgi için bkz:Plan Kılavuzları'nı kullanarak sorgu Parameterization davranışı belirleme.

    • Yapın sorgu ipuçları yalnızca gerektiğinde kullanın.Önceki sürümleri karşı çalıştırılan ipuçlarını kullanarak sorgular. SQL Server Belirtilen ipuçları sınamıştır. Ipuçlarını, daha iyi bir yürütme planı seçme alınan sorgu iyileştiricisi engelleyebilirsiniz.Daha fazla bilgi için bkz:SELECT (Transact-SQL).

  • The query_plan_hash, yakalama depolamak ve sorgular için sorgu yürütme planları zamanla karşılaştırmak için kullanın.Örneğin, sistem yapılandırmasını değiştirdikten sonra özgün sorgu planı karma değerlerini görev kritik sorgularını sorgu planı karma değerlerini karşılaştırabilirsiniz.Sorgu planı karma değerleri arasındaki farklılıklar, sistem yapılandırmasını değiştirdiğinizde, önemli sorguları için güncelleştirilmiş sorgu yürütme planları sonuçlandı söyleyebilirsiniz.Geçerli bir uzun süre çalışan sorgu için yürütme sys.dm_exec_requests, sorgu planı karma değeri iyi performans için bilinen, temel sorgu planı karma değerden, farklıysa durdurmaya da karar verebilirsiniz.Daha fazla bilgi için bkz:Bulma ve benzer sorgular, sorgu ve Query kullanarak ayarlama sağlamalarını planlanır..

  • Yaptığınız kullanımı sorgu idarecisi yapılandırma seçeneği.The sorgu idarecisi yapılandırma option can be used to prevent system resources from being consumed by long-running queries.Varsayılan olarak, seçenek, bunların ne kadar sürüyor olsun yürütülecek tüm sorgulara izin vermek için küme.Ancak, tüm bağlantıları veya yalnızca belirli bir bağlantı için sorguları yürütmek için tüm sorgulara izin verilmiyor saniye sayısı üst sınırını almak için sorgu idarecisi ayarlayabilirsiniz.Maliyet, fiili saat yerine tahmini sorguyu sorgu idarecisi bağlı olduğu tüm çalışma ek yükünü yok.Önceden tanımlanmış bazı sınırı düğmelerini tıklatana kadar bunları çalıştırmak yerine, başlamadan önce uzun süre çalışan sorguları durdurur.Daha fazla bilgi için bkz: sorgu idarecisi maliyet limiti seçeneği ve küme QUERY_GOVERNOR_COST_LIMIT (Transact-SQL).

  • Yeniden kullanmak üzere plan önbelleğinden sorgu planları, en iyi duruma getirin.The Database Engine caches query plans for possible reuse.Bir sorgu planı önbellekteyse, hiçbir zaman kullanılabilmesinden.Bunun yerine, önbelleğe alınmamış bir sorgu planları poorer performans; bunlar yürütülür her derlenmeli.Aşağıdaki Transact-SQL küme deyim seçenekleri yeniden, önbelleğe alınan sorgu planlarını engeller. C Transact-SQL Bunlar içeren toplu iş iş küme seçenekleri ON açık derlendi bu toplu iş iş iş, sorgu planları paylaşamıyor OFF küme seçenekleri açık:

    küme ansi_null_dflt_off

    küme ANSI_NULL_DFLT_OFF

    küme ansi_nulls

    küme ansi_padding

    küme ansi_warnings

    küme ARITHABORT

    küme concat_null_yields_null

    küme datefirst

    küme dateformat

    küme forceplan

    küme DİLİ

    küme no_browsetable

    küme numeric_roundabort

    küme QUOTED_IDENTIFIER

    küme textsize

     

    Buna ek olarak, ANSI_NULLS ANSI_NULL_DFLT_ON, ANSI_PADDING, ANSI_WARNINGS, CURSOR_CLOSE_ON_COMMIT, IMPLICIT_TRANSACTIONS ve QUOTED_IDENTIFIER küme seçenekleri değiştirmek için kullanılabilir olduğundan, önbelleğe alınan sorgu planlarını, yeniden ANSI_DEFAULTS küme seçenek etkiler.küme ANSI_DEFAULTS ile değiştirilebilir küme seçeneklerin çoğu, sorgu planlarının yeniden etkileyen küme seçenekleri olarak listelenen unutmayın.

    Bazılarını değiştirmek için aşağıdaki yöntemleri küme seçenekleri:

Not

Sorgu planlarının küme seçenekleri ile neden yeniden önlemek için , bağlantı saat küme seçenekleri oluşturmak ve, bağlantı süresince değiştirmeyin emin olun.Bazı küme seçenekleri, dizin oluşturulmuş görünümler veya dizinleri hesaplanan sütunlar üzerinde kullanılacak belirli değerlere ayarlanmalıdır.Daha fazla bilgi için bkz:sonuçlar etkiler, küme seçenekleri.

See Also

Other Resources