KB4051361 . Сведения о цели строки оптимизатора в плане выполнения запроса, добавленные в SQL Server 2014, 2016 и 2017

Применяется к
SQL Server 2016 Standard - 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 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core 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)

Сводка

Добавьте новый атрибут плана выполнения запроса EstimateRowsWithoutRowGoal в пакет обновления 3 (CU3) SQL Server 2017 и Microsoft SQL Server 2016 с пакетом обновления 2 (SP2).

Когда оптимизатор запросов оценивает стоимость плана выполнения запроса, он обычно предполагает, что все соответствующие строки из всех источников должны быть обработаны. Однако некоторые запросы заставляют оптимизатор запросов искать план, который быстрее возвращает меньшее количество строк. Это может произойти, если в запросе используется предложение TOP , указание запроса FAST number_rows , предложение IN или EXISTS или инструкция SET ROWCOUNT { number | @number\_var } . В этом случае оптимизатор использует цель строки при оценке плана запроса. Если применяется план цели строк, предполагаемое количество строк в плане выполнения запроса уменьшается. Это связано с тем, что план предполагает, что для достижения цели строки необходимо обработать меньшее количество строк.

Примечание Оценка, сделанная с помощью цели строки, является приблизительной. Если фактическое распределение данных является неоднородным, оно может быть меньше фактического количества строк, которые необходимо обработать. Таким образом, он может создать неэффективный план запроса. В качестве решения этой проблемы можно использовать параметр запроса USE HINT (DISABLE_OPTIMIZER_ROWGOAL) или флаг трассировки 4138.

Дополнительные сведения см. в статье Обновление вводит аргумент указания запроса USE HINT в SQL Server 2016. Однако в сложных запросах может быть сложно определить, применяется ли цель строки и насколько это влияет на выбор плана.

С помощью атрибута EstimateRowsWithoutRowGoal можно сравнить результаты с результатами атрибута EstimateRows , чтобы узнать, сколько строк влияет на оценки оптимизатора запросов.

Примечание Если цель строки не применяется к конкретному оператору плана запроса, этот атрибут не включается.

Дополнительные сведения

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

Накопительный пакет обновления 3 для SQL Server 2017 г.

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

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

Последнее накопительное обновление для SQL Server 2017 г.

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

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

Пакет обновления 2 (SP2) для SQL Server 2016

Пакет обновления 3 (SP3) для SQL Server 2014

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

Пакеты обновления являются накопительными. Каждый новый пакет обновления содержит все исправления, которые были в предыдущих пакетах обновления, а также все новые исправления. Мы рекомендуем применить последний пакет обновления и последнее накопительное обновление для этого пакета обновления. Вам не нужно устанавливать предыдущий пакет обновления перед установкой последнего пакета обновления. Дополнительные сведения о последнем пакете обновления и последнем накопительном обновлении см. в таблице 1 в следующей статье.

Определение версии, выпуска и уровня обновления SQL Server и его компонентов

Ссылки

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