Проблема
Предположим, что вы выполнили запрос, включающий объединение или агрегирование для столбца, на который распространяется статистика как по одному, так и по нескольким столбцам (в котором этот столбец не является ведущим). Если вы используете средство оценки количества по умолчанию (CE) в SQL Server 2016, он может недооценивать количество разных строк. Это приводит к неоптимальному плану выполнения запроса (например, низкая оценка может привести к недостаточному временно предоставленному буферу памяти для хэш-оператора, что приводит к переносу запроса в tempdb).
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Решение
Эта проблема устранена в следующем накопительном пакете обновления для SQL Server:
Примечание Чтобы это исправление вступило в силу, необходимо включить исправления оптимизатора запросов с использованием флага трассировки (TF) 4199 или соответствующей конфигурации базы данных или параметра запроса hint.
Сведения о накопительных обновлениях для SQL Server:
Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:
Временное решение
Эту проблему можно устранить, добавив следующую подсказку запроса:
ИСПОЛЬЗУЙТЕ HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION')
Ссылки
Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.