Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
Почему отличается план простейшего запроса в SQL2000 и SQL2008?
насколько я понимаю - план у 2000-го более оптимальный или ошибаюсь?

прикладываю скрин с планами

К сообщению приложен файл. Размер - 27Kb
18 ноя 14, 16:35    [16866577]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428


К сообщению приложен файл. Размер - 37Kb
18 ноя 14, 16:36    [16866581]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428


К сообщению приложен файл. Размер - 49Kb
18 ноя 14, 16:36    [16866585]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Это одно и то же по своей сути.
18 ноя 14, 16:54    [16866765]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
TJ001
Почему отличается план простейшего запроса в SQL2000 и SQL2008?
насколько я понимаю - план у 2000-го более оптимальный или ошибаюсь?

Потому, что оптимизатор претерпел серьезные изменения при переходе от 2000 к 2005 и соответственно к 2008.
В 2000 был Bookmark Lookup, в 2005 Key Lookup для таблицы с кластерным индексом или RID Lookup для кучи соединено при помощи с NL. В плане эффективности нет никакой разницы, операторы NL+LookUp делают тоже самое, что и Bookmark Lookup в 2000.
18 ноя 14, 16:54    [16866766]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
прочитайте еще раз описание свjеже для Bookmark Lookup в версии 2000
18 ноя 14, 16:54    [16866767]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
В 2000 не было покрывающих индексов. Сервер, на самом деле, выполняет то же самое, но план этого не отображает.
18 ноя 14, 17:03    [16866862]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
_djХомяГ
Guest
Владислав Колосов
В 2000 не было покрывающих индексов. Сервер, на самом деле, выполняет то же самое, но план этого не отображает.

Не оч понятно - как не было покрывающих индексов
Until SQL 2000, we used to create a covering index by concatenating a number of columns to support a query execution. Starting from SQL Server 2005, Microsoft has added a new feature which is known as the “INCLUDE” column index.
18 ноя 14, 17:10    [16866956]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
спасибо, я так примерно и предполагал, что изменилась логика и уровень детализации операций в плане и все это привело к такой картине

но вот еще один момент:
почему "предполагаемая стоимость поддерева" для SELECT в 2008м - 0,0065704 попугая, а в 2000м - 0,0033331 попугайчик, т.е. в 1,97 раза меньше?
18 ноя 14, 17:17    [16867036]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
TJ001
спасибо, я так примерно и предполагал, что изменилась логика и уровень детализации операций в плане и все это привело к такой картине

но вот еще один момент:
почему "предполагаемая стоимость поддерева" для SELECT в 2008м - 0,0065704 попугая, а в 2000м - 0,0033331 попугайчик, т.е. в 1,97 раза меньше?
Новерное, "Потому, что оптимизатор претерпел серьезные изменения при переходе от 2000 к 2005 и соответственно к 2008."

Сообщение было отредактировано: 18 ноя 14, 17:28
18 ноя 14, 17:28    [16867157]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
_djХомяГ
Владислав Колосов
В 2000 не было покрывающих индексов. Сервер, на самом деле, выполняет то же самое, но план этого не отображает.

Не оч понятно - как не было покрывающих индексов
Until SQL 2000, we used to create a covering index by concatenating a number of columns to support a query execution. Starting from SQL Server 2005, Microsoft has added a new feature which is known as the “INCLUDE” column index.


Я бы не назвал суррогат таким благородным именем :)
18 ноя 14, 17:31    [16867188]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
Гавриленко Сергей Алексеевич
TJ001
спасибо, я так примерно и предполагал, что изменилась логика и уровень детализации операций в плане и все это привело к такой картине

но вот еще один момент:
почему "предполагаемая стоимость поддерева" для SELECT в 2008м - 0,0065704 попугая, а в 2000м - 0,0033331 попугайчик, т.е. в 1,97 раза меньше?
Новерное, "Потому, что оптимизатор претерпел серьезные изменения при переходе от 2000 к 2005 и соответственно к 2008."


значит ли это, что на 2008м запрос выполняется в ~2 раза медленнее?
18 ноя 14, 17:55    [16867386]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
TJ001, вам необходимо переписать индекс по новым правилам, с учетом INCLUDE.
18 ноя 14, 18:06    [16867450]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Владислав Колосов
TJ001, вам необходимо переписать индекс по новым правилам, с учетом INCLUDE.
Для запроса SELECT *? :-)
18 ноя 14, 18:10    [16867472]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
alexeyvg
Владислав Колосов
TJ001, вам необходимо переписать индекс по новым правилам, с учетом INCLUDE.
Для запроса SELECT *? :-)


Точно, не посмотрел.
18 ноя 14, 18:15    [16867504]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
TJ001
Гавриленко Сергей Алексеевич
пропущено...
Новерное, "Потому, что оптимизатор претерпел серьезные изменения при переходе от 2000 к 2005 и соответственно к 2008."


значит ли это, что на 2008м запрос выполняется в ~2 раза медленнее?

Не значит, это значит только то, что изменилась модель оценки стоимости.
18 ноя 14, 18:36    [16867613]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Владислав Колосов
Я бы не назвал суррогат таким благородным именем :)


Какие суррогаты? Покрывающий индекс, это индекс который покрывает нужды запроса, то что в 2000м не было include, не значит, что там не было покрывающих индексов. Вообще, сказать что "нет покрывающих индексов", это все равно, что сказать "нет запроса, который мог бы выполниться без обращения к базовой структуре хранения". Возьмите любую книгу тех времен, того же Хендерсона, и увидите как там обсуждается этот вопрос. Не вводите в заблуждение ТС.
18 ноя 14, 18:44    [16867652]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Если ТС все еще сомневается, вот из блога разработчика оптимизатора:
Bookmark Lookup
Craig Freedman
In SQL Server 2000, we implement bookmark lookup using a dedicated iterator whether the base table is a clustered index or heap:
Картинка с другого сайта.
In SQL Server 2005, we use a regular clustered index seek if the base table is a clustered index or a RID (record id) lookup if the base table is a heap:
Картинка с другого сайта.
You can tell that the clustered index seek is a bookmark lookup by the LOOKUP keyword in text showplan or by the attribute Lookup=“1” in XML showplan. I will explain the behavior of the nested loops join in a future post. The loop join and clustered index seek (or RID lookup) perform the same operation as the bookmark lookup in SQL Server 2000.

(выделено мной)

Так что не парьтесь.
18 ноя 14, 18:52    [16867699]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
SomewhereSomehow,
исчерпывающий ответ, спасибо! Картинка с другого сайта.
18 ноя 14, 19:17    [16867864]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Однако существует факт, что тот же запрос по плану 2 на 2005 выполняется медленнее при условии, что выполняется по куче. Я вспомнил, что столкнулся с этой проблемой.

Насчет термина "покрывающий". Насколько я помню это было той фичей, которую с гордостью представили на презентации 2005 сервера, имея в виду опцию INCLUDE. Вероятно, меня ввели в заблуждение.
19 ноя 14, 11:07    [16870159]     Ответить | Цитировать Сообщить модератору
 Re: Почему отличается план простейшего запроса в SQL2000 и SQL2008?  [new]
o-o
Guest
Владислав Колосов
Насчет термина "покрывающий". Насколько я помню это было той фичей, которую с гордостью представили на презентации 2005 сервера, имея в виду опцию INCLUDE. Вероятно, меня ввели в заблуждение.

термин "покрывающий индекс" не привязан ни к какой конкретной СУБД, и уж тем более к какой-то "фиче", не слушайте "их" :)
Database_index#Covering_index
19 ноя 14, 13:08    [16871192]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить