Показан индекс за столом invt_item_d
на (item_id & branch_id & co_id)
столбцов. Результаты плана для первого запроса: TABLE ACCESS FULL
, а стоимость - 528
, Результаты для второго запроса: INDEX FAST FULL SCAN
(мой индекс) и стоимость: 27
.разные столбцы на выбранных результатах запроса разные расходы
Единственное отличие состоит в том, что, как видите, выбранный столбец используется в индексе для второго запроса.
С этим что-то не так? И, пожалуйста, можете ли вы сказать мне, что мне делать, чтобы исправить это на уровне администрирования db?
select d.qty
from invt_item_d d
where d.item_id = 999
and d.branch_id = 888
and d.co_id = 777
select d.item_id
from invt_item_d d
where d.item_id = 999
and d.branch_id = 888
and d.co_id = 777
EDIT: я сделал новый запрос и стоимость, этот запрос является 529, с ТАБЛИЦЫ ACCESS FULL.
select qty from invt_item_d
так что не имеет значения, если я использовать индекс или нет. Некоторые говорят, что это нормально, действительно ли это нормальное поведение?
@leitmotif первый ответ уже был правильный ответ (ИМХО), почему вы игнорируете это? –
, потому что все столбцы в разделе where существуют в индексе. индекс не для того, что вы выбираете, для того, что вы фильтруете. поэтому, это не правильный ответ. – leitmotif
@leitmotif - вы ошибаетесь. Столбцы в индексе могут использоваться также для того, что вы выбираете. Нет необходимости обращаться к таблице, если все данные уже присутствуют в индексе. –