Каково минимальное количество строк, требуемых создать индекс?

Я создал сценарий для нахождения селективности каждого столбца для всех таблиц. В некоторых таблицах меньше чем с 100 строками селективность столбца составляет больше чем 50%. Где Селективность = Отличные Значения / строки Общего количества. Действительно ли те столбцы имеют право на индекс? Или, можно ли сказать мне минимальное требование для количества строк для создания индекса?

9
задан Jlange 19 August 2016 в 20:08
поделиться

3 ответа

Можно индексировать по любому столбцу - вопрос в том, имеет ли это смысл и будет ли использоваться этот индекс....

Обычно может сработать селективность менее 1-5% - чем меньше этот процент, тем лучше. Самое лучшее - это отдельные значения из большого количества населения, например, один идентификатор клиента из сотен тысяч - эти индексы определенно будут использоваться.

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

Но на самом деле, единственный способ узнать, имеет ли индекс смысл, это

  • измерить ваши запросы до того, как
  • создаст индекс
  • снова запустит ваши запросы, проверит их планы выполнения, измерит их тайминги

Нет никакого золотого правила о том, когда индекс будет использоваться (или проигнорирован) - слишком много переменных играют в это решение.

Некоторые советы экспертов о том, как работать с индексами, как узнать, какие индексы могут не использоваться, и когда имеет смысл создать индекс, смотрите в постелях блога Кимберли Трипп (Kimberly Tripp):

5
ответ дан 4 December 2019 в 23:06
поделиться

Я не уверен насчет sql-сервера, но большинство СУБД не использует индекс для поиска, если может получить все строки таблицы в одном входе/выходе. Вы увидите это в пояснениях к PLAN, некоторые таблицы всегда сканируются в табличном пространстве.

IMHO, любую таблицу с менее чем 5000 строк не стоит анализировать на предмет кардинальности, если СУБД работает на сервере.

.
0
ответ дан 4 December 2019 в 23:06
поделиться

Большинство СУБД для данных и кода (хранимой процедуры, плана выполнения и т.п.) использует кэш . В SQL-сервере это называется кэшем данных и процедур , а в Oracle - буферной кэш-памятью и SGA-памятью . Данные и/или индекс таблицы могут находиться в кэше.

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

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

2
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: