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

CREATE TABLE [dbo].[Test](
[id] [int] NOT NULL,
[test] [varchar](50) NULL,
[test1] [varchar](50) NULL
) ON [PRIMARY]


Запрос

SELECT test
FROM Test
where test='aaaa' and test1='ffff'

план показывает, что используется некластерный по полю test1
встает вопрос как определить поля по которым нужно
ставить индексы. Выходит рекомендации микрософта не работают: из них следует
в данном случае нужен по полю test либо по полям test test1
10 янв 14, 10:42    [15395017]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ппппппппппрр
Выходит рекомендации микрософта не работают: из них следует
в данном случае нужен по полю test либо по полям test test1

Почему вы решили, что "рекоменадции не работают" ?
10 янв 14, 10:47    [15395067]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
ппппппппппрр
Выходит рекомендации микрософта не работают: из них следует
в данном случае нужен по полю test либо по полям test test1
Почему не работают? Действительно нужен индекс по полю test либо по полям test test1.
ппппппппппрр
встает вопрос как определить поля по которым нужно
ставить индексы.
В данном случае глядя на запрос, можно ещё посмотреть статистику (если селективность по test высокая, то можно сделать инедкс по test INCLUDE(test1)).
10 янв 14, 10:49    [15395074]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Если поле test1 уникально, ну или просто с очень хорошей селективностью, а таблица большая, то оптимизатор вполне себе прав.

Абстрактных рекомендаций в вакууме не бывает, надо учитывать селективность полей при создании индексов.
10 янв 14, 10:51    [15395082]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
ппппппппппрр
Guest
alexeyvg
ппппппппппрр
Выходит рекомендации микрософта не работают: из них следует
в данном случае нужен по полю test либо по полям test test1
Почему не работают? Действительно нужен индекс по полю test либо по полям test test1.
ппппппппппрр
встает вопрос как определить поля по которым нужно
ставить индексы.
В данном случае глядя на запрос, можно ещё посмотреть статистику (если селективность по test высокая, то можно сделать инедкс по test INCLUDE(test1)).


Неясно почему используется индекс по тест 1. Поле не уникально
10 янв 14, 11:17    [15395259]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ппппппппппрр
Неясно почему используется индекс по тест 1. Поле не уникально

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

Сообщение было отредактировано: 10 янв 14, 11:20
10 янв 14, 11:20    [15395276]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
хмхмхм
Guest
ппппппппппрр

Неясно почему используется индекс по тест 1. Поле не уникально


Да в вашем примере вообще table scan должен быть. Скрипт создания таблицы вы привели без индексов на ней.
10 янв 14, 11:21    [15395283]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
ппппппппппрр
Guest
хмхмхм
ппппппппппрр
Неясно почему используется индекс по тест 1. Поле не уникально


Да в вашем примере вообще table scan должен быть. Скрипт создания таблицы вы привели без индексов на ней.


Почему думаете что тэйблскан?
10 янв 14, 11:44    [15395488]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
хмхмхм
Guest
ппппппппппрр,

потому что индексов нет вообще в первом посте, только таблица как куча.
10 янв 14, 11:49    [15395533]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
ппппппппппрр
Неясно почему используется индекс по тест 1. Поле не уникально
Ну мало ли почему...

Других нету, или селективность хорошая, или хорошая селективность именно по значению 'ffff' (а для других значений будет использоваться другой инедкс).

Каждый случай нужно рассматривать подробно, пока у вас только показана таблица без данных и без индексов.
То есть для неё в любом случае оптимальный план =- это составной индекс по test, test1 либо скан, но если составного нет, то могут быть варианты.
10 янв 14, 11:57    [15395584]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
Glory
Member

Откуда:
Сообщений: 104751
хмхмхм
потому что индексов нет вообще в первом посте, только таблица как куча.

Что-то мне подсказывает, что автор темы о них скромно умолчал.
Как и о деталях "план показывает, что используется некластерный по полю test1"
Вполне возможно, что там index seek/scan+key lookup

Сообщение было отредактировано: 10 янв 14, 12:00
10 янв 14, 12:00    [15395616]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
ппппппппппрр,

у меня закрадывается подозрение, что автор придает какое-то значение порядку условий на столбцы в where. да?
10 янв 14, 12:02    [15395628]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
ппппппппппрр
Guest
Скиньте ссылку на правила расстановки индексов в инете
10 янв 14, 12:55    [15396050]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ппппппппппрр
правила расстановки индексов

Что за правила ?
10 янв 14, 12:55    [15396058]     Ответить | Цитировать Сообщить модератору
 Re: индексы  [new]
ппппппппппрр
Guest
Glory
ппппппппппрр
правила расстановки индексов

Что за правила ?

был такой раздел в msdn не могу найти... Мож и не правила а рекомендации
10 янв 14, 12:58    [15396085]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить