Oracle Cost Based Based Optimizer (CBO) пытается выбрать самый дешевый путь доступа к таблице. Пути доступа к одной таблице включают сканирование диапазона индекса, полное сканирование индекса и полное сканирование таблицы; CBO оценит стоимость каждого из этих планов и выберет план с наименьшей стоимостью.
1. Что если индекс находится на A, B, C, D?
да, Oracle может использовать этот индекс - и стоимость может быть довольно низкой, поскольку в вашем запросе ограничены ведущие столбцы (3 из них) индекса.
2. Что если индекс находится на B, C?
да, Oracle может использовать этот индекс - и стоимость может быть довольно низкой, поскольку все столбцы индекса ограничены в вашем запросе.
3. Будет ли индекс выбираться только когда он находится на A, B, C?
нет, это не исключение. да, Oracle может использовать этот индекс - и стоимость может быть довольно низкой, поскольку все столбцы индекса ограничены в вашем запросе.
Другие факторы, которые следует учитывать:
- Ваш запрос выбирает
*
(все столбцы) из таблицы. Если в таблице только четыре столбца (A, B, C, D), CBO, вероятно, предпочтет план, полностью удовлетворяющий запросу по индексу (A, B, C, D), не обращаясь к таблице вообще.
- вы не задали более интересный вопрос: « Что, если индекс находится на D, C, B, A? » - ответ на этот вопрос - да, Oracle может использовать индекс (например, с полным сканированием индекса или сканированием с пропуском индекса). Просто думал, что я добавлю это туда:)