Решение от вопроса:
Я обнаружил, что могу получить те же преимущества от организации индекса, просто добавив запрошенные столбцы в конец индекса parent_id
, то есть вместо:
create index foo_idx on foo_tab(parent_id);
Я делаю:
create index foo_idx on foo_tab(parent_id, col1, col2, col3);
Где col1
, col2
, col3
и т. Д. Часто используемые столбцы.
У меня есть толькосделать это с помощью индексов, которые используются для возврата нескольких строк, которые получают выгоду от упорядочения и, следовательно, локальности диска, обеспечиваемой индексом, вместо того, чтобы перемещаться по таблице.Индексы, которые обычно используются для возврата отдельных строк, которые я оставил для ссылки на таблицу, так как в любом случае есть только одна строка для чтения, так что локальность имеет гораздо меньшее значение.
Как я уже говорил, это в основном таблица для чтения,а также пространство не является большой проблемой, поэтому я не думаю, что чрезмерные затраты на записи, вызванные этими индексами, являются большой проблемой.
(я понимаю, что это не будет индексировать null
parent_id
с, но вместо этого я сделал еще один индекс для decode(parent_id, null, 1, null)
, который индексирует нули и только нули).