2013-06-04 21 views
5

Ben çalıştırmak için 10 saniye sürdü ki (aşağıda) yürütülürken çalıştı bir sql sorgusu var ve bu üretim ortamına beri sadece oluyor hiçbir sql kilitleme olduğundan emin olmak için onu durdurduBu sorgulardan birini daha hızlı yapan nedir?

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 

Şimdi eğer yaratma zamanı (ki bir endeks olduğuna inanmıyorum) tarafından bir sipariş eklerseniz, 2 saniye sürer ve tamamlanır.

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 
    order by T.CreatedOn asc 

Şimdi vurucu sadece yaklaşık satır bile TOP 1000000 ile kısa hala tüm satırlar geçiyor hangi satırların üzerinde durmuyor söylüyor ki, döndürülür olmasıdır.

SQL sunucusunun nasıl çalıştığı ve sorgu ayrıştırma işleminin nasıl işlediğine dair temel bir anlayışa sahibim, ancak yalnızca bu durumun neden bu kadar hızlı yapıldığını anlamıyorum.

sunucu yürütülüyor SQL sunucusu 2008 R2

+1

Sorguların her birinden "EXPLAIN PLAN" a bakın ve işlerin nasıl yapıldığına ilişkin farkın ne olduğunu görün. –

+1

İki sonuç her zaman 10 saniye ve 2 saniyede mi dönüyor? – Kane

+0

@Kane tam buralarda. Aslında birincisini bitiremedim çünkü sunucunun kaynakları kilitlemesini istemedim ** EDIT ** İlkinin tamamen çalışmasına izin verdim ve 20 saniye sürdüm (arka arkaya 20 kere aldım) –

cevap

5

ek sıralama işlemi, paralel planı kullanmak SQL Server için bu durumda görünüşe yeterlidir. (ORDER BY olmadan)

yavaş bir seri plandır hızlı biri DegreeOfParallelism eser yerine sadece tek bir olandan 24 parçacıkları tarafından yapılıyor yani 24 ait sahiptir oysa.

Bu, sıralama için gereken ek çalışmaya rağmen çok daha az geçen süreyi açıklar.