Одной из основных целей индекса является уменьшение количества строк, считываемых из таблицы. Низкий индекс мощности означает, что столбец принимает только несколько значений. Таким образом, если таблица содержит десять миллионов строк и имеется десять значений, то каждое значение будет иметь - в среднем - миллион строк.
Индекс бесполезен для извлечения миллиона строк из десяти таблица миллионов строк, потому что каждая (или почти каждая) страница данных будет иметь соответствующую строку. Цель состоит в том, чтобы уменьшить количество читаемых страниц данных.
Таким образом, использование вами индекса вполне разумно, поскольку вы найдете только несколько строк. Вы используете индекс для поиска необработанных строк, и их немного.
Ваш индекс намного больше необходимого, поскольку содержит информацию об обработанных строках. Вы можете рассмотреть отфильтрованный индекс. Из того, что вы описываете, я думаю, что это будет:
create index idx_items_status_updated
on items(status, updated)
where status in (1, 2);
Иногда в этих ситуациях вы хотите использовать кластеризованный индекс для state
. По сути, это позволяет «обработанным» элементам группироваться вместе. И, если страницы данных, на которых они находятся, не доступны, то эти страницы данных загружать не нужно.
Однако в вашем случае, я предполагаю, что элементы добавляются последовательно, поэтому только более новые элементы в процессе. Старые страницы данных будут заполнены обработанными элементами и, поскольку на них никогда не ссылаются, могут даже не занимать место в памяти.