Подсказки в SQL Server - PullRequest
       9

Подсказки в SQL Server

1 голос
/ 05 ноября 2008

Действительно ли нужны подсказки для каждого оператора SQL? У нас есть dba, который анализирует это и просит нас давать подсказки для каждого оператора select и update в наших хранимых процессах. Это действительно необходимо?

Ответы [ 5 ]

9 голосов
/ 05 ноября 2008

Не обычно. Помещение их на все звучит как излишество.

Документация говорит

Поскольку оптимизатор запросов SQL Server обычно выбирает лучший план выполнения для запроса, мы рекомендуем, чтобы join_hint, query_hint и table_hint использовались только в качестве крайней меры опытными разработчиками и администраторами баз данных

7 голосов
/ 05 ноября 2008

Ваш администратор базы данных неправильно .

С MS :

Потому что оптимизатор запросов SQL Server обычно выбирает лучшее исполнение планировать запрос, мы рекомендуем подсказка присоединения , подсказка запроса и табличная подсказка использоваться только как последний прибегать к помощи опытных разработчиков и администраторы базы данных.

1 голос
/ 05 ноября 2008

Зависит - оптимизатор запросов делает довольно хороший выбор намерений. Какие подсказки требует ваш администратор БД? @Ned немного нехорошо - намек явно указывает оптимизатору не определять путь, а вместо этого использовать вашу оптимизацию.

Законодательство о том, что вы должны всегда или никогда не использовать подсказки, является некоторым неосведомленным о проблемах, которые подсказки должны решить. Некоторые случаи, когда подсказки были критическими:

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

Никогда не приходилось использовать подсказки о соединении.

1 голос
/ 05 ноября 2008

Обычно это просто назад. Однако в зависимости от вашей ситуации это может быть желательно.

Например, у нас есть одна база данных (на самом деле набор баз данных на одном сервере), где все данные представляют собой ночной моментальный снимок системы мэйнфреймов, используемый для отчетов и других целей. Помимо пакетного процесса, который воссоздает базы данных каждую ночь, ничто не делает никаких записей в эту систему. В этом контексте схема блокировки по умолчанию не подходит, и политика между нашей группой и ИТ-группой, которая управляет всеми нашими серверами, не позволяет нам изменить ее. Итак: почти все запросы к этим БД имеют подсказки with (nolock).

Я предполагаю, что существуют другие ситуации, когда у вас могут быть базы данных отчетов без записей или, возможно, наоборот: база данных архивирования или ведения журнала, которая редко читается. Дело в том, что иногда может быть создана специализированная база данных, где схема блокировки по умолчанию не подходит, и вы не можете ее изменить. Тогда вам понадобится множество пинат ... Я имею в виду подсказки.

Но это исключение, которое подтверждает правило. В общем, оптимизатор базы данных умнее, чем вы, когда дело доходит до таких вещей, как блокировка.

1 голос
/ 05 ноября 2008

Подсказки - это просто подсказки. Они помогают оптимизатору сделать лучшую возможную работу. Но, как и при любой оптимизации, вы должны сосредоточиться на утверждениях, которые на самом деле являются проблемами.

...