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:
Use sp_configure yordamı için Sunucu bazındaki değişiklikler depolanır.Daha fazla bilgi için bkz:sp_configure (Transact-SQL).
küme yan tümce, ALTER DATABASE deyimini kullanın.Daha fazla bilgi için, bkz. ALTER DATABASE Transact-SQL)
OLE DB ve ODBC bağlantı ayarlarını değiştirin.Daha fazla bilgi için bkz:istemci Network yapılandırma (İstemci Ağ Yapılandırması).
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.