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

Откуда: Münster, Germany
Сообщений: 1738
сортировки где? Внутри самого индекса (в WHERE индекса) или внутри запросов? Опять же, что значит не могут применяться, запрещается их вставлять в WHERE или вставлять можно но не будет увеличения производительности? Сорри если вопрос глупый, но в доке и книге что под рукой это не уточняется а MSSQL 2008 под рукой нет.
23 янв 12, 13:07    [11951542]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Glory
Member

Откуда:
Сообщений: 104751
Где вы это вообще прочитали ?
23 янв 12, 13:18    [11951630]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Тобиаш Тернстрем и другие SQL Server 2008 Разработка баз данных Экзамен 40-433 MCTS
23 янв 12, 13:40    [11951908]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
Тобиаш Тернстрем и другие SQL Server 2008 Разработка баз данных Экзамен 40-433 MCTS

И цитата будет опубликована ?
23 янв 12, 13:41    [11951917]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
автор
Включенные столбцы не могут применяться для сортировки или фильтрации; их единственное достоинство - снижение количества считываний страниц с помощью полностью покрытых запросов и за счет исключения подстановок из таблицы (table lookups)
стр. 239.
23 янв 12, 13:47    [11952009]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17424
это Index with Included Columns.
эти всключеные столбцы внутри индекса не сортируются, поэтому таки да, для сортировки (ORDER BY) и lzk фильтрации во where их пользовать нельзя.
http://msdn.microsoft.com/en-us/library/ms190806.aspx
23 янв 12, 13:52    [11952066]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ну, слегка верно.. но только слегка. вообще есть 2 варианта - явно включать и явно не включать поля кластерного в некластерный

вот примерчик:

-- drop table dbo.t1
go

create table dbo.t1 ( id int identity primary key , f1 int , f2 int )
go

create index It1_1 on dbo.t1( f1 )
go

-- insert into dbo.t1 ( f1 , f2 ) select id, id from sysobjects
-- select count(*) from dbo.t1
-- update statistics t1


я догнал число строк до 100+ тыщ. теперь

set showplan_text on
go

select top 100 * from dbo.t1 where f1 between 10 and 100 order by f1, id
go

set showplan_text off
go


StmtText                                                                                                                                                              
--------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  |--Top(TOP EXPRESSION:((100)))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([EDC].[dbo].[t1].[id]))
            |--Index Seek(OBJECT:([EDC].[dbo].[t1].[It1_1]), SEEK:([EDC].[dbo].[t1].[f1] >= (10) AND [EDC].[dbo].[t1].[f1] <= (100)) ORDERED FORWARD)
            |--Clustered Index Seek(OBJECT:([EDC].[dbo].[t1].[PK__t1__3213E83F678C52CD]), SEEK:([EDC].[dbo].[t1].[id]=[EDC].[dbo].[t1].[id]) LOOKUP ORDERED FORWARD)


как можно видеть - сортировки в плане нет, хотя ИД явно в индекс не входит. лукап идет из-за того, что в выборке фигурируют поля, которых нет в индексе 1

если запрос расширим

select top 100 * from dbo.t1 where f1 between 10 and 100 and id between 10 and 100 order by f1, id


то в плане все равно особо ничего не помянется - оптимизатор "в курсе", что значение поля ИД присутствует в индексе
23 янв 12, 14:01    [11952167]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Crimian,

вообще план должен измениться - должен быть индекс сик по кластерному и усе... без лукапа... завтра попробую - стало интересно както...
23 янв 12, 17:22    [11954374]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Crimean
Member

Откуда:
Сообщений: 13147
SanyL
вообще план должен измениться - должен быть индекс сик по кластерному и усе... без лукапа... завтра попробую - стало интересно както...


я тоже ждал, что план поменяется, но - я ждал лишней сортировки
они с этим включением мутят не первый раз уже очень давно :)
если что - проверялось на 10.50.2796.0
23 янв 12, 21:00    [11956181]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Crimean
ну, слегка верно.. но только слегка. вообще есть 2 варианта - явно включать и явно не включать поля кластерного в некластерный

Простите, уважаемый, а в чем разница то в этих 2х вариантах? В синтаксисе? В одном случае не пишем INCLUDE, а в другом пишем? (чтобы сервер его все равно проигнорировал)
23 янв 12, 23:29    [11956966]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Crimean
SanyL
вообще план должен измениться - должен быть индекс сик по кластерному и усе... без лукапа... завтра попробую - стало интересно както...

я тоже ждал, что план поменяется, но - я ждал лишней сортировки ...

А сортировка то откуда должна взяться, не пойму? Если ID в ключе индекса.

Crimean
они с этим включением мутят не первый раз уже очень давно :)

И непонятно каким боком тут INCLUDE участвует, чет я не увидел его в ваших примерах.
23 янв 12, 23:36    [11957001]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Mind
И непонятно каким боком тут INCLUDE участвует, чет я не увидел его в ваших примерах.


у меня были случаи, когда надо было явно поля кластерного в некластерный включать
быстро не нашел
я намекал на разницу между

create index It1_1 on dbo.t1( f1 )

и

create index It1_1 on dbo.t1( f1, id )

в первом случае были проблемы с сортировкой для сложных запросов - не брался индекс, совпадающий с сортировкой, а это было очень нужно для решения задачи
24 янв 12, 23:07    [11964450]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Crimean
Mind
И непонятно каким боком тут INCLUDE участвует, чет я не увидел его в ваших примерах.


у меня были случаи, когда надо было явно поля кластерного в некластерный включать
быстро не нашел
я намекал на разницу между

create index It1_1 on dbo.t1( f1 )

и

create index It1_1 on dbo.t1( f1, id )

в первом случае были проблемы с сортировкой для сложных запросов - не брался индекс, совпадающий с сортировкой, а это было очень нужно для решения задачи

В теории этого не должно быть. Физически индексы идентичны.
25 янв 12, 00:06    [11964632]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Mind
В теории этого не должно быть. Физически индексы идентичны.


возможно там side - эффект был из-за сложности запросов

у меня модель на самая простая - партишенед вью накрытая общей вью с использованием табличных UDF - в них прячется часть логики чтобы оптимизатору крышу не рвало совсем. стратегии выборки оптимизированы под скан индексов, совпадающих с сортировкой. сортировки для пейджинга уникальны. видать мне включение полей помогало из-за "более полного" попадания индекса в сортировку

второй момент - если не изменяет склероз - где-то проскакивало, что поля кластерного в некластерные попадают "несортированными" и из-за этого могут быть эффекты сугубо при сортировках или при выборе merge стратегий оптимизатором

но - прямо сейчас пруф не дам - не смог повторить разное поведение
25 янв 12, 12:10    [11966618]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Crimean
Mind
В теории этого не должно быть. Физически индексы идентичны.


накрытая общей вью с использованием табличных UDF - в них прячется часть логики чтобы оптимизатору крышу не рвало совсем.

И что, помогает? Если мне память не изменяет, то табличные UDF разворачиваются в момент построения плана и тогда разницы для оптимизатора никакой не будет. Хотя могу ошибаться.


Crimean
второй момент - если не изменяет склероз - где-то проскакивало, что поля кластерного в некластерные попадают "несортированными" и из-за этого могут быть эффекты сугубо при сортировках или при выборе merge стратегий оптимизатором

но - прямо сейчас пруф не дам - не смог повторить разное поведение

Слабо в это верится. Поля кластерного в некластерном используются самим сервером для поиска. Такая логика работает при UPDATE операции, может быть в каких то других случаях тоже, не уверен. Так что хранить ключи несортированными было бы непростительной ошибкой. Можно и тест накидать чтобы посмотреть сортированы они или нет, если будет время - попробую сделать.
25 янв 12, 20:58    [11971854]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Mind
И что, помогает? Если мне память не изменяет, то табличные UDF разворачиваются в момент построения плана.


так они есть инлайновые и малти-стейтмент, однако. у меня вторые. их "невозможно развернуть", однако. тут бага есть, файлить буду на коннекте - по партнерке отказали - join сервером иногда выполняется как apply, что бред и на порядки более жруче по ресурсам
25 янв 12, 22:14    [11972197]     Ответить | Цитировать Сообщить модератору
 Re: Включаемые поля некластеризованного индекса не могут применяться для ограничения или ....  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Crimean
Mind
И что, помогает? Если мне память не изменяет, то табличные UDF разворачиваются в момент построения плана.


так они есть инлайновые и малти-стейтмент, однако. у меня вторые. их "невозможно развернуть", однако.

А ну да, вспомнил, мне малти-стейтмент как то совсем не нравятся, там же estimates совсем никакие. Т.е. на выходе всегда ожидается одна строка, как следствие кривые планы и никакие пляски с бубном не помогут.

Crimean
тут бага есть, файлить буду на коннекте - по партнерке отказали - join сервером иногда выполняется как apply, что бред и на порядки более жруче по ресурсам

Сомневаюсь, что это поможет, наверняка это фича, а не бага.
25 янв 12, 23:54    [11972726]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить