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

Откуда:
Сообщений: 1197
Если не брать в расчет скорость вставки, апдейтов и делетов и место на диске
Много индексов это хорошо?
т.е. к примеру есть таблица с 30 полями. По 15 из них часто идут выборки, причем комбинаций выборок может быть много. И сейчас на таблице 8 разных индексов.
Это как, нормально?
21 мар 15, 14:56    [17413759]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
relief,

нормально
21 мар 15, 15:38    [17413837]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
relief,

если вставок нет, то может и 50 индексов быть
21 мар 15, 18:33    [17414249]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
relief
Если не брать в расчет скорость вставки, апдейтов и делетов и место на диске
Много индексов это хорошо?
Хорошо, что плохого? Для каждой комбинации условий (и, укстати, требуемых полей) - свой индекс. Если "не брать в расчет скорость вставки, апдейтов и делетов и место на диске", то это хорошо.
21 мар 15, 20:04    [17414563]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
relief
Member

Откуда:
Сообщений: 1197
alexeyvg
relief
Если не брать в расчет скорость вставки, апдейтов и делетов и место на диске
Много индексов это хорошо?
Хорошо, что плохого? Для каждой комбинации условий (и, укстати, требуемых полей) - свой индекс. Если "не брать в расчет скорость вставки, апдейтов и делетов и место на диске", то это хорошо.


А вот все не могу осилить некластерные индексы.
Вот есть 2 таблицы: people(Id int, name varchar, countryid int) countries(Id int, countryname varchar). Связи между таблицами нет!

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

Select a.name, b.countryname 
From people a
Join countries b
On a.countryid = b.id


Вот name и countryname включать в класс терний индекс или делать некластерные по обеим таблицам и имена делать include? Или может я вообще неверно мыслю?
21 мар 15, 23:04    [17415302]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
relief,

а сколько там строк в таблицах и сколько строк в среднем на странице. м. б. вам вообще индексы не нужны.
22 мар 15, 00:19    [17415540]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
[quot relief]Если не брать в расчет скорость вставки, апдейтов и делетов и место на диске
Много индексов это хорошо?


да. даже если брать в расчет скорость вставки, апдейтов и делетов.


т.е. к примеру есть таблица с 30 полями. По 15 из них часто идут выборки, причем комбинаций выборок может быть много. И сейчас на таблице 8 разных индексов.
Это как, нормально?

да, вполне. причем 8 это и не так много. плохо лишь когда есть неиспользуемые никогда индексы.
22 мар 15, 10:05    [17416031]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
relief
alexeyvg
пропущено...
Хорошо, что плохого? Для каждой комбинации условий (и, укстати, требуемых полей) - свой индекс. Если "не брать в расчет скорость вставки, апдейтов и делетов и место на диске", то это хорошо.


А вот все не могу осилить некластерные индексы.
Вот есть 2 таблицы: people(Id int, name varchar, countryid int) countries(Id int, countryname varchar). Связи между таблицами нет!

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

Select a.name, b.countryname 
From people a
Join countries b
On a.countryid = b.id


Вот name и countryname включать в класс терний индекс или делать некластерные по обеим таблицам и имена делать include? Или может я вообще неверно мыслю?


неверно.

связь есть. по Пк. как раз кластерный индекс тут будет в тему.

и не балуйся include ами. они очень редко нужны, для очень тонкой оптимизации редких запросов, в основном, аналитических.
22 мар 15, 10:11    [17416032]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MasterZiv
и не балуйся include ами. они очень редко нужны, для очень тонкой оптимизации редких запросов, в основном, аналитических.
Они нужны, для того, чтобы поля, не участвующие в предикатах, не нужно было пихать в ключ индекса, чтобы он стал покрывающим. При чем здесь тонкая оптимизация или аналитика?
22 мар 15, 10:34    [17416047]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
relief
Select a.name, b.countryname 
From people a
Join countries b
On a.countryid = b.id

Вот name и countryname включать в класс терний индекс или делать некластерные по обеим таблицам и имена делать include?
Для данного запроса самое оптимальное: для people сделать некластерный по countryid, include name, для countries сделать некластерный по id, include countryname
22 мар 15, 11:43    [17416127]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
MasterZiv
неверно.

связь есть. по Пк. как раз кластерный индекс тут будет в тему.
Ну ведь кластерный индекс будет шире, чем покрывающий с INCLUDE

Концептуально покрывающий индекс с INCLUDE - это такой же кластерный индекс по подмножеству полей в таблице, как бы "маленькая копия" таблицы. Естественно, такой вариант может оказаться быстрее.

Это может быть избыточным, да, но никак не замедлит выборки.
22 мар 15, 11:49    [17416134]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
Гавриленко Сергей Алексеевич
MasterZiv
и не балуйся include ами. они очень редко нужны, для очень тонкой оптимизации редких запросов, в основном, аналитических.
Они нужны, для того, чтобы поля, не участвующие в предикатах, не нужно было пихать в ключ индекса, чтобы он стал покрывающим. При чем здесь тонкая оптимизация или аналитика?


Ну вот это и есть тонкая оптимизация.

А аналитика тут при том, что если запрос вытянивает одну запись, то нет проблемы сбегать за полем в таблицу.
А проблема будет, когда таких записей сотни и тыщи -- тогда этот шаг умножается на 1000 и это становится проблемой.
А сотни и тыщи записей обрабатывают обычно сложные аналитические отчёты.
22 мар 15, 12:22    [17416181]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
alexeyvg
MasterZiv
неверно.

связь есть. по Пк. как раз кластерный индекс тут будет в тему.
Ну ведь кластерный индекс будет шире, чем покрывающий с INCLUDE

Концептуально покрывающий индекс с INCLUDE - это такой же кластерный индекс по подмножеству полей в таблице, как бы "маленькая копия" таблицы. Естественно, такой вариант может оказаться быстрее.

Это может быть избыточным, да, но никак не замедлит выборки.


(я не говорил, что это замедлит выборки, хотя может слегка, если запрос не покрывается, за счёт того, что индекс длиннее)

Да, может. Но строить все индексы так, чтобы они были покрывающими -- это тупик, не построиш. Потому что запросов обычно много.
Где-то как-то -- да, можно от безысходности сделать индекс покрывающим за счёт INCLUDE.
22 мар 15, 12:25    [17416184]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Хм... вот гляжу сколько стран в мире вроде 193 +/-. Видимо, в таблице countries не так уж много страниц (1-2?). ВИдимо автору не нужно никаких индексов совсем. Hash Join подойдет.
22 мар 15, 12:33    [17416196]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
relief
Member

Откуда:
Сообщений: 1197
churupaha
Хм... вот гляжу сколько стран в мире вроде 193 +/-. Видимо, в таблице countries не так уж много страниц (1-2?). ВИдимо автору не нужно никаких индексов совсем. Hash Join подойдет.


В реале таблицы другие и строк намного больше 30000 * 100 млн. Дал для примера.
23 мар 15, 07:53    [17417581]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
alexeyvg
MasterZiv
неверно.

связь есть. по Пк. как раз кластерный индекс тут будет в тему.
Ну ведь кластерный индекс будет шире, чем покрывающий с INCLUDE

Why?
23 мар 15, 09:41    [17417802]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
Ivan Durak
alexeyvg
пропущено...
Ну ведь кластерный индекс будет шире, чем покрывающий с INCLUDE

Why?
Потому что в кластерном будут все колонки, а в покрывающем только нужные.
Естественно, при одинаковых полях это не так. Я предполагал, что в запросе
Select a.name, b.countryname 
From people a
Join countries b
On a.countryid = b.id
у таблицы countries ещё куча полей.
23 мар 15, 10:31    [17417979]     Ответить | Цитировать Сообщить модератору
 Re: Много индексов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
alexeyvg,
а ну разве что.
23 мар 15, 11:37    [17418273]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить