Показать сообщение отдельно
Старый 15.09.2005, 10:22   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Из книги: AXAPTA 3.0 Разработка бизнес-приложений. Алексей Еременко, Руслан Шашков

стр 368

FirstFast - рекомендации оптимизатору выбрать первую запись, что может заставить оптимизатор производить поиск по порядку в соответствии с индексом, вне зависимости от условия where, то есть не используя подсказки оптимизатора;

FirstOnly - рекомендация оптимизатору выбрать первую запись, вне зависимости от того, сколько записей соответствует условию запроса.

==============================================

Далее уже от себя

Если говорить "по человечески", то FirstOnly возьмет только первую попавшуюся запись из результата выборки, а FirstOnly - ускорит получение первой записи, но может сильно затормозить получение всех остальных записей выборки.

FirstOnly - имеет смысл использовать, если необходимо получить одну и только одну запись, но в выборке может оказаться несколько записей. На скорость выборки никак не влияет. Это нечто вроде аналога конструкции SELECT TOP 1 ...

FirstFast - имеет смысл использовать, если результат выборки обрабатывается в цикле (while select), где каждая итерация цикла занимает относительно много времени. В этом случае, быстро получаем первую запись и начинаем ее обрабатывать, а скорость выборки остальных записей не так уж и важна, поскольку потеря в скорости "съедается" длительной обработкой одного шага цикла. Если в результирующей выборке только одна запись, то ее использование бессмысленно.

Теперь собственно вопрос: Ускорит ли совместное использование FisrtOnly и FirstFast получение одной и только одной записи, если в результирующей выборке может быть несколько записей?

На "вскидку" не скажу. Надо экспериментировать. Однако практика показывает, что "родные" оптимизаторы SQL-сервера, как правило, справляются с задачей оптимизации (ускорения) выборки значительно лучше, чем "ручное" указание что и как надо делать. А хинт FisrtFast - это и есть "ручное" указание. Т.е., в общем случае, его использование, скорее всего, приведет не к ускорению, а к замедлению получения выборки.

Кроме того, не вполне ясно, в какой именно момент FirstOnly сделает выбор единственной записи. При получении первой записи или после получения всех записей. Тоже надо бы проверить...
За это сообщение автора поблагодарили: Recoilme (3).