Может ли таблица быть «слишком малой», чтобы получить какую-либо прибыль, индексируя ее?

Допустим, у меня есть таблица, в которой никогда не будет более 10 записей. Имеет ли на нем индекс какой-либо ощутимой выгоды? Будет ли это иметь отрицательные результаты?

Как насчет 20 записей? 50? 500? В какой момент таблица действительно видит ощутимые преимущества индекса, предполагая современное, многообещающее выделенное серверное оборудование для базы данных.

Как и все, что угодно SQL, ИТ ЗАВИСИТ .

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

Для больших таблиц это будет зависеть. Нет «точки отсечения», где она становится выгодной для каждой таблицы. Это будет зависеть от ширины строки, селективности поля, которое вы индексируете, ширины индекса, если оно кластерное или некластеризованное и т. Д.

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

Для действительно маленьких таблиц индексы, вероятно, не будут использоваться для простого доступа – стоимость сканирования таблицы меньше, чем индексный поиск, за которым следует фактический поиск / ссылка на данные.

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

Мы вручную разворачивали ссылку на одну такую ​​таблицу (приблизительно 20 строк), которая использовалась в коррелированном подзапросе в отношении гораздо большей таблицы. На одном клиенте в этом запросе использовалось 4,2 миллиарда просмотров, поскольку он выполнял сканирование таблицы для каждой отдельной связанной строки в большой таблице. Развертывание этой операции привело к сокращению на 99% + сокращений (примерно 380 000) и 18-часовому сокращению времени выполнения.

EDIT : Сделать ссылку ссылки на подзапросы.

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

Если ваша таблица находится в зоне с сильной помощью, а не в серой области, то я чувствую следующее: не индексируйте ее, если у вас нет данных, указывающих, что это поможет (Profiler или что-то в этом роде). Память, доступная вашему серверу базы данных, в большинстве случаев не все – по сравнению с размерами самих баз данных, что позволяет большему количеству этой базы данных входить в кеш. Другие, конечно, не согласны и имеют вполне обоснованные аргументы.

  • Джон

Я не вижу, как таблица с только 1 строкой может извлечь выгоду из индексации. Так да.

Если таблица находится в отношениях FK, тогда да, это важно, даже если она имеет 3 значения, если она ссылается на таблицу с 3 миллионами строк. Технически сторона FK должна иметь уникальное ограничение. Но если это кластерный ПК только на 3 значениях, он имеет ощутимые преимущества, если на него ссылаются миллионы раз, когда он поворачивает сканирование и ищет индекс.

Давайте будем гением компьютера.