Если вы действительно хотите принудительно использовать индекс, в этом случае вы можете использовать индекс на основе функций. Например, если мы перейдем к dbfiddle.uk , настроим таблицу и запустим EXPLAIN PLAN для вашего первого запроса, мы получим:
OPERATION OPTIONS OBJECT_NAME OBJECT_TYPE OPTIMIZER
SELECT STATEMENT ALL ROWS
FILTER
HASH GROUP BY
TABLE ACCESS FULL PURCHASE TABLE
Теперь мы добавляем функцию на основе функцииindex:
CREATE INDEX IX_PURCHASE_1 ON PURCHASE(SUBSTR(RECEIPTNO,1,3))
, затем запустите другой EXPLAIN PLAN, и вот что мы получаем:
OPERATION OPTIONS OBJECT_NAME OBJECT_TYPE OPTIMIZER
SELECT STATEMENT ALL ROWS
FILTER
SORT GROUP BY NOSORT
INDEX FULL SCAN IX_PURCHASE_1 INDEX ANALYZED
Таким образом, вы можете стимулировать использование индекса здесь, создав соответствующий индекс.