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

Откуда:
Сообщений: 9
Добрый день, коллеги.
Возник теоретический вопрос:
В таблице есть поле INT
Таблица операционная, по ней выборки.
Начиная с какого числа строк надо строить блок статистики?
Начиная с какого количества строк надо строить индекс?

Коллеги, есть какие наработки, опыт в подобной ситуации?
Или где почитать?

Заранее большое спасибо, буду ждать ответов, комментариев.

С уважением.
9 июн 21, 14:49    [22333336]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
aleks222
Member

Откуда:
Сообщений: 1414
Alexander_KM

В таблице есть поле INT

О поле, поле, кто тебя усеял отсутствующими мозгами?

Индекс можно и нужно строить с 0 (нуля) строк.
Ибо он не мешает на малом количестве строк, а когда станет "многа строк" - будет помогать.

Единственное исключение - ежели вы никогда не собираетесь что-либо выбирать из своей таблицы.
Но зачем тогда таблица?
9 июн 21, 15:02    [22333342]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Alexander_KM
Member [заблокирован]

Откуда:
Сообщений: 9
хаму aleks222
- построение индекса занимает какое-то время
- если есть индекс, поиск идет через него
- страница весит 8Кб (MSSQL читает страницами), и если таблица менее этого размера, при наличии индекса операция получается более затратная
- читай BOL и не позорься

Коллеги, у кого есть нормальные соображения по вопросу?

Сообщение было отредактировано: 9 июн 21, 15:04
9 июн 21, 15:10    [22333347]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Alexander_KM
Member [заблокирован]

Откуда:
Сообщений: 9
Ладно, если никто подобного не делал, сегодня так или иначе сделаю бенч-тест, результаты выложу...
Как всегда на свой вопрос сам и напишу ответ.
Ждите к вечеру...
9 июн 21, 15:57    [22333376]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1775
Alexander_KM,

Тут достаточно много может быть вводных: какой индекс? какая нагрузка преобладает? какой конечной цели вы хотите добиться?

Уже не помню точно у кого когда то читал то ли Бен Ган толи Рендал рекомендовал почти всегда иметь на таблицах кластерный индекс, но это обуславливалось сравнением куч и кластерного индекса.

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

нет никакого профита что на табличке
create table t ([id] int, [key] int, [val] varchar(255), index ix (key)) 
вы построите такой индекс а запросы идут
select val from t where id = @something

в надежде на то что когда то вам понадобится быстрая выборка по колонке key

поэтому вопрос топика уж очень абстрактный

Alexander_KM,
если коротко, ответ на ваш вопрос должен выглядеть так:
видите явно узкие места в запросах/планах стройте индекс, не видите пусть работает.

Если Вы вдруг проектируете сферического коня в вакууме какую то систему в потенциалом что в будущем объемы данных вырастут и вам понадобятся индексы на таблицах, продумайте просто заранее в каких местах будет выигрыш от их использования в зависимости от конкретных запросов.
Понятное дело что не возможно заранее продумать все возможные варианты, но проблемы можно будет решать по мере их поступления.

Сообщение было отредактировано: 9 июн 21, 18:46
9 июн 21, 18:49    [22333496]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Alexander_KM
Member [заблокирован]

Откуда:
Сообщений: 9
Согласен, наконец-то умный человек, спасибо за уточнения.
почти дописал сет.
результат выложу сегодня, !!! НО есть хам ...
потому не буду выкладывать код, только результат ...
felix_ffб пишите в почту, передам сет

P.S.
- индекс не кластерный (не кластеризированный)
- таблица - куча

Сообщение было отредактировано: 9 июн 21, 18:56
9 июн 21, 19:02    [22333502]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Владислав Колосов
Member

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

практика - критерий истины. Нельзя дать точный ответ на неточный вопрос. Задайте точный вопрос.
9 июн 21, 19:18    [22333511]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1775
Alexander_KM,

что бы не быть голословным вот неплохая статья на тему сравнения куч и кластерных индексов
https://www.sqlshack.com/clustered-index-vs-heap/

а вот размышления Рендала по поводу наличия индексов на таблицах
https://www.sqlskills.com/blogs/paul/over-and-under-indexing-how-bad-is-it-out-there/

+

зараза не помню в какой статье читал про рекомендацию про кластерные индексы, вроде точно у Пола , он ее в платную подписку чтоли утащил?
9 июн 21, 19:32    [22333518]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Alexander_KM
Member [заблокирован]

Откуда:
Сообщений: 9
Согласен (Владислав Колосов, felix_ff), но есть серверная платформа записи в рамках INT, на ней и были тесты:
- одна страница ~ 622- 625 записи ничего не надо, пусть будет пустая
- две страницы ~ 1244 записи стата рулит
- три страницы ~ > 1866 записей индекс рулит

P.S.
Напоминаю, индекс не кластерный, таблица - куча
Цифры 622, 1244, 1866 - зависят от внутренней й и внешней фрагментации, на 1 - 3 розниться могут

Пользуйтесь.

Сообщение было отредактировано: 9 июн 21, 19:34
9 июн 21, 19:37    [22333520]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
Кесарь
Member

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

при каких запросах? Простой join такой таблицы с бОльшей приведёт к чему? Правильно, исследуемая таблица будет просканирована столько раз, сколько строк будет отобрано из бОльшей. Отличное решение, ага.

Вы что вообще исследуете? Какая задача или проблема стоит?
9 июн 21, 19:43    [22333522]     Ответить | Цитировать Сообщить модератору
 Re: Строить индекс или нет  [new]
aleks222
Member

Откуда:
Сообщений: 1414
Кесарь
Alexander_KM,

при каких запросах? Простой join такой таблицы с бОльшей приведёт к чему? Правильно, исследуемая таблица будет просканирована столько раз, сколько строк будет отобрано из бОльшей. Отличное решение, ага.

Вы что вообще исследуете? Какая задача или проблема стоит?


Стоит "стандартная задач кота, которому делать нечего".
10 июн 21, 08:55    [22333575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить