Що робить OPTION FAST в операторі SELECT?


29

Я трохи розкопав те, що OPTION (FAST XXX)натякає на запит всередині SELECTоператора, і я все ще плутаю його. За даними MSDN:

Вказує, що запит оптимізовано для швидкого пошуку перших номерів. Це невід’ємне ціле число. Після повернення першого числа_row запит продовжує виконання та виробляє повний набір результатів.

Для мене це не має великого сенсу, але в основному запит може отримати перші XXX рядки дуже швидко, а потім решту на нормальній швидкості?

Запит Microsoft Dynamics, який мене змусив задуматися над цим:

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

Хто-небудь може пояснити, що саме робить цей підказки, і це перевага перед його використанням?

Відповіді:


24

A FAST Nскаже SQL Server генерувати план виконання, швидко повертаючи кількість рядків, визначених як N.

Зауважте, що оцінки будуть відповідати, Nоскільки ви говорите серверу sql Nякнайшвидше отримати рядки.

наприклад, працює нижче запиту з 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)

Ест проти фактичних рядків з option (fast 500)

введіть тут опис зображення

Ест проти фактичних рядків без option (fast 500)

введіть тут опис зображення

Випадком використання буде те, коли програма виконує кешування (завантажує велику кількість даних у фоновому режимі) і хоче якомога швидше показати користувачеві фрагмент даних.

Ще один цікавий випадок використання - в землі SSIS, яку Роб Фарлі описує FAST Nяк каталізатор, що прискорює пошук даних.

Додавши цю підказку, здавалося, що чарівна паличка була помахана по запиту, щоб змусити її працювати в кілька разів швидше.

Дивіться також відповідь Ремуса Русану .


11

Використовуючи цей підказку для запиту OPTION (FAST n), оптимізатор вибирає план виконання, який може повернути цю кількість записів найшвидшим способом. Зазвичай оптимізатор намагається визначити шлях, який може ефективно повернути повний набір результатів. Отже, якщо ви хочете, щоб набір рядків швидко повертався, ви можете скористатися цим способом, щоб отримати їх, але в більшості випадків використання цього підказки призведе до того, що повний набір результатів повернеться повільніше, ніж оптимізатор дозволить використовувати план, який потрібно зробити так.

Просто для детального розгляду випадку використання: у вас можуть бути дві досить великі таблиці, які вам потрібно об'єднати, але ви знаєте, що лише один менший набір даних, з яким вам потрібно працювати з однією з них. У цьому випадку використання FAST для більшої таблиці без створення додаткових індексів / накладних витрат може допомогти замість того, щоб дозволяти SQL створювати гігантську хеш-таблицю у фоновому режимі.


2

Я наткнувся на те саме питання пару років тому, коли досліджував проблеми продуктивності в Dynamics AX. Після пояснення Майкрософт я міг побачити інший план виконання, викликаний натяком, і це відповідає іншим відповідям, наведеним тут.

За допомогою підказки SQL Server намагається знайти план виконання, який дозволяє на зразок потокової передачі результатів, оскільки вони виходять, наприклад, із вкладеного циклу, замість плану виконання, який вимагає, щоб усі записи були прочитані (і потенційно відсортовані) раніше виводиться.

Єдине питання в моєму випадку полягає в тому, що сервер SQL завжди потребував (численних) хвилин, щоб повернути результати при використанні підказки, тоді як запит повертав результати (весь набір результатів) за лічені секунди без підказки ... не зовсім те, що очікувалося. Я особисто використовував би цей натяк з великою обережністю, а не систематично для всіх форм, як у нашому Dynamics середовищі (ну, не більше).

Отже, щоб відповісти на ОП: як і багато підказок, це не обов'язково допомагає покращити запит, як це належить зробити (так ... тест, тест, тест!)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.