KB4023419 - ИСПРАВЛЕНО: запрос с UNION ALL и целой строкой может выполняться медленнее в SQL Server 2014 и более поздних версиях по сравнению с SQL Server 2008 R2

Применяется к
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

Проблема

При запросе представления в Microsoft SQL Server 2014 или 2016 может потребоваться гораздо больше времени для выполнения по сравнению с выполнением в SQL Server 2008 R2.

При выполнении запроса, в котором используется функция UNION ALL и указанное поле строки (например, предложение TOP N, FAST N или предикат EXISTS), вы можете заметить, что в SQL Server 2014 или более поздних версиях запрос выполняется медленнее, если сравнивать его с SQL Server 2008 R2.

Причина

В SQL Server 2008 R2 оптимизатор запросов изменяет порядок различных частей в UNION ALL, если присутствует цель строки, таким образом, самая дешевая часть идет первой. Это позволяет запросу завершить выполнение раньше, если более дешевые части производят необходимое количество строк, не продолжая выполнять более дорогие части. Такое переупорядочение не происходит в более поздних версиях SQL Server.

Решение

Эта проблема устранена в следующем накопительном пакете обновления для SQL Server:

Накопительный пакет обновления 7 для SQL Server 2016 RTM

Накопительный пакет обновления 4 для SQL Server 2016 с пакетом обновления 1 (SP1)

Накопительный пакет обновления 6 для SQL Server 2014 с пакетом обновления 2 (SP2)

Примечание Для решения этой проблемы необходимо включить оптимизатор запросов.

Дополнительные сведения об оптимизаторе запросов и флагах трассировки см. по следующим ссылкам.

Исправление оптимизатора запросов SQL Server Модель обслуживания TF 4199

Команды консоли DBCC и флаги трассировки

Сведения о накопительных обновлениях для SQL Server:

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

Последний накопительный пакет обновления для SQL Server 2016

Последний накопительный пакет обновления для SQL Server 2014

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Ссылки

Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.