#sql-server #join-hints
#sql-server #join-подсказки
Вопрос:
Как мне узнать, где явно использовать хэш-подсказку join? Как иногда оптимизатор запросов обманывается и применяет подсказку, которая иногда влияет на производительность?
Комментарии:
1. «Если вам нужно спрашивать цену, вы не можете себе этого позволить»
Ответ №1:
Лично я никогда не использовал подсказку соединения в. Когда-либо.
Они хороши только для данных и статистики, которые у вас есть на данный момент. Я видел, как они использовались, чтобы попытаться замаскировать плохой дизайн, плохую индексацию или плохую конструкцию запроса. Хэш-соединение само по себе неплохо
Можете ли вы обновить, чтобы показать запрос, в котором, по вашему мнению, вам нужна подсказка о соединении, пожалуйста? И мы можем предложить другие решения…
Комментарии:
1. Я заметил, что при выполнении проектов с использованием статистики CDC может быстро рассинхронизироваться, и это может быть разницей между соединением во вложенном цикле и соединением с хэшем. В этих случаях хэш-соединение, объединение слиянием или объединение с вложенным циклом по-прежнему идеально, но SQL server не знает, потому что статистика отключена. Иногда обновление статистики запрос выполняется медленнее, чем в нескольких случаях, когда объединение хэша / объединение слиянием / объединение с вложенным циклом не имеет смысла, особенно когда он не выполняет чтение вперед, потому что он думает, что набор данных, который он задает, будет чрезвычайно маленьким, потому что статистика немного отклонена.
2. Я вижу огромный прирост производительности при использовании хэша. Я использую это только в качестве последнего средства, когда запрос, который, как я знаю, должен выполняться быстро, длится целую вечность. Однако моя среда отличается. Я работаю в сторонней базе данных, которая не имеет связей с внешним ключом ни в одной из сотен своих таблиц. Я склонен думать, что SQL Server использует эти отношения для разработки оптимального плана. Это правильное предположение?
3. @MikeTeeVee: ошибка… не уверен, TBH. Я уверен, что что-то читал, но попытаюсь найти авторитетный источник