Есть ли причина использовать индекс для очень маленьких таблиц (до 1000 строк)?

9

Во время разработки приложений у меня есть много таблиц, в которых хранится «небольшое» количество данных (обычно 10-40 значений id+ valueи иногда type), которые содержат атрибуты для «объектов», такие как свежие / гнилые, красные / зеленые / синие для продуктов.

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

Для хранения атрибутов я использую пользовательские небольшие таблицы, где 2-3 поля: idдля ссылок, nameдля отображения в приложении и иногда, typeесли атрибуты группируются в одной категории.

Первичные «объекты» связаны с атрибутами через промежуточные таблицы «многие ко многим».

Есть ли какая-либо причина создавать и поддерживать индексы для этих «небольших словарей», содержащих менее 1000 элементов (обычно 10–40)?

Моя целевая база данных - Oracle, но я надеюсь, что этот ответ не зависит от поставщика ...

Я заполняю - нет, но у меня нет технических навыков, чтобы оправдать мое заполнение ...

gavenkoa
источник

Ответы:

14

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

При наличии индекса ваш шаблон доступа будет смотреть только на соответствующие строки (в желаемом диапазоне ключей), поэтому чисто статистическая вероятность попадания в конфликт блокировки значительно снижается.

Ремус Русану
источник
Спасибо за объяснение, у меня есть дополнительный вопрос (несмотря на то, что он сейчас 3 года спустя). Как насчет очень маленьких таблиц с максимум 3 или 4 рядами?
Роб
Скорее всего, будут отсканированы небольшие таблицы (которые вмещаются в 1-2 страницы)
Ремус Русану
@Remus требуется для создания индекса на MySQL
Сингх Кайлаш