SELECT deyiminde OPTION FAST ne yapıyor?


29

OPTION (FAST XXX)Sorgu ipucunun bir SELECTifadede ne yaptığını biraz araştırdım ve hâlâ kafam karıştı. MSDN’ye göre:

Sorgunun ilk sayı_ satırının hızlı alımı için optimize edildiğini belirtir. Bu negatif olmayan bir tamsayıdır. İlk number_rows döndürüldükten sonra sorgu çalışmaya devam eder ve tüm sonuç kümesini oluşturur.

Benim için çok anlamlı değil ama temelde sorgu ilk XXX satırını gerçekten hızlı, sonra gerisini normal hızda alabilir mi?

Bu konuda beni düşündürdü Microsoft Dynamics sorgu:

select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like  '%'
order by project OPTION(FAST 500)

Bu sorgu ipucunun ne yaptığını ve kullanmamakta avantajını tam olarak kimse açıklayabilir mi?

Yanıtlar:


24

A FAST N, SQL Server'a, olarak tanımlanan satır sayısını hızlı bir şekilde döndüren bir yürütme planı oluşturmasını söyleyecektir N.

Tahminlerin, Nsql sunucusuna Nsatırları mümkün olan en hızlı şekilde almasını söylediğinizden itibaren olacağına dikkat edin .

örneğin sorguyla aşağıda çalışan fast 500:

-- total rows : 19972
 SELECT [BusinessEntityID]
      ,[TotalPurchaseYTD]
      ,[DateFirstPurchase]
      ,[BirthDate]
      ,[MaritalStatus]
      ,[YearlyIncome]
      ,[Gender]
      ,[TotalChildren]
      ,[NumberChildrenAtHome]
      ,[Education]
      ,[Occupation]
      ,[HomeOwnerFlag]
      ,[NumberCarsOwned]
  FROM [AdventureWorks2012].[Sales].[vPersonDemographics]
  order by BusinessEntityID
  option (fast 500)

Est ile Gerçek satır option (fast 500)

görüntü tanımını buraya girin

Est vs Gerçek satırlar olmadan option (fast 500)

görüntü tanımını buraya girin

Bir kullanım durumu , bir uygulama önbellekleme yaparken (arka planda büyük miktarda veri yükle) ve kullanıcıya mümkün olduğu kadar çabuk bir veri dilimi göstermek istediğinde olur.

Bir başka ilginç kullanım örneği, SSIS arazisinde Rob Farley'ninFAST N veri alımını hızlandıran bir katalizör olarak kullandığını açıklamaktadır .

Bu ipucunu ekleyerek, birkaç kez daha hızlı çalışmasını sağlamak için, sorgu boyunca sallanan bir sihirli değnek gibi hissettirdi.

Bkz Remus Rusanu yanıtını de .


11

Bu sorgu ipucunu kullandığınızda OPTION (FAST n), en iyi duruma getirici bu kayıt miktarını mümkün olan en hızlı şekilde geri verebilecek bir yürütme planı seçer. Normal olarak, en iyi duruma getirici, tüm sonuç kümesini verimli bir şekilde geri getirebilecek bir yola karar vermeye çalışır. Bu nedenle, bir dizi kümenin hızlı bir şekilde geri gelmesini istiyorsanız, bunları geri almak için bunu muhtemelen kullanabilirsiniz, ancak çoğu durumda, bu ipucunu kullanmak, en iyi duruma getiricinin bir plan kullanmasına izin vermek yerine tam sonuç kümesinin daha yavaş geri gelmesine neden olur yani.

Sadece bir kullanım durumunun detaylandırılması için: Birlikte katılmanız gereken oldukça büyük iki masanız olabilir, ancak bunlardan biriyle birlikte çalışmanız gereken daha küçük bir veri kümesi olduğunu biliyorsunuz. Bu durumda, FAST'in ek dizinler / ek yük oluşturmak zorunda kalmadan daha büyük bir tablo üzerinde kullanılması, SQL'in arka planda dev bir karma tablo oluşturmasına izin vermek yerine, yardımcı olabilir.


2

Birkaç yıl önce Dynamics AX'teki performans sorunlarını araştırırken aynı soruya rastladım. Microsoft'un açıklamasının ardından, ipucu tarafından tetiklenen farklı bir yürütme planı görebiliyordum ve bu, burada verilen diğer cevaplara karşılık geliyor.

İpucuyla, SQL Server, daha önce tüm kayıtların okunmasını (ve potansiyel olarak sıralanmasını) gerektiren bir yürütme planı yerine örneğin iç içe geçmiş bir döngüden çıktıklarında, sonuçların bir tür akışına izin veren bir yürütme planı bulmaya çalışır. çıktı olmak.

Benim durumumdaki tek sorun, ipucunu kullanırken sonuçları döndürmek için SQL sunucusunun her zaman (çok sayıda) dakika sürmesiydi; oysa sorgu, sonuçların (tüm sonuç kümesinin) ipucu olmadan birkaç saniye içinde ... geri dönüşünü sağladı. bekleniyordu. Kişisel olarak bu ipucunu büyük bir titizlikle kullanırdım ve sistematik olarak Dynamics ortamındaki (artık değil) her türlü formda değil.

Öyleyse, OP'ye cevap vermek için: birçok ipucu gibi, sorgunun yapması gerektiği gibi sorguyu geliştirmeye yardımcı olması gerekmez (yani ... test et, test et, test et!)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.