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

Откуда:
Сообщений: 1197
Есть 3 индекса на таблице Sales.
nonclustered index 1 (articul)
nonclustered index 2 (saledate) include (store, city)
clustered index (saleid)


есть такой запрос

select a.store, a.city from Sales a 
 join #t b 
 on a.articul = b.articul


вижу перед собой план в котором вместо index 2 используется почему то clustered index.
C чем это связано может быть, ведь в кластерной индексе нет store, city?
Я клоню к тому, почему не используется index join?
13 апр 15, 17:00    [17509083]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21253
Так WHERE нет, индекс непокрывающий - дешевле сканировать таблицу.
13 апр 15, 17:08    [17509118]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
o-o
Guest
relief
ведь в кластерной индексе нет store, city?

в "кластерной индексе" есть все.
это в вашем nonclustered index 2 нет articul...
13 апр 15, 17:10    [17509132]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
nonclustered index 3 (articul) include(store, city)

вот такой бы сработал
13 апр 15, 17:13    [17509142]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
relief
Member

Откуда:
Сообщений: 1197
o-o
relief
ведь в кластерной индексе нет store, city?

в "кластерной индексе" есть все.
это в вашем nonclustered index 2 нет articul...



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

а как некластерный index 1 находит нужную запись в кластерном? RID?
13 апр 15, 17:14    [17509150]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
o-o
Guest
relief
а как некластерный index 1 находит нужную запись в кластерном? RID?

saleid
13 апр 15, 17:24    [17509186]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
relief
Member

Откуда:
Сообщений: 1197
o-o
relief
а как некластерный index 1 находит нужную запись в кластерном? RID?

saleid


т.е. saleid скрыто хранится как указатель во всех некластерных индексах?
13 апр 15, 17:31    [17509225]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8833
relief,

хранится. Поэтому и рекомендации по его размеру есть у MS.
13 апр 15, 17:33    [17509233]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31985
relief
вижу перед собой план в котором вместо index 2 используется почему то clustered index.
index 2 точно невыгодно использовать, там же articul не проиндексировано
Можно было бы использовать index 1, но сервер предположил, что данных выберется много, и делать лукапы будет невыгодно (сервер тут может и ошибиться, может, в #t мало записей с подходящими articul?).

Самый выгодный индекс был бы:
nonclustered index 2 (articul) include (store, city)
13 апр 15, 19:23    [17509568]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
relief
в джойне используется index 1, просто потом я думал будет дергаться второй некластерный
У вас второй некластерный построен по полю saledate. Как вы думаете можно ли по saledate найти уникальную запись во втором индексе?
relief
т.е. saleid скрыто хранится как указатель во всех некластерных индексах?
Какая неожиданность, да? За 7 лет работы с SQL Server вы не прочитали ни одной книги или статьи, по тому как устроены индексы?
13 апр 15, 23:48    [17510316]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить