Я создал запрос, делая это в ORACLE:функции на основе индекса с использованием SubStr и Instr
SELECT SUBSTR(title,1,INSTR(title,' ',1,1)) AS first_word, COUNT(*) AS word_count
FROM FILM
GROUP BY SUBSTR(title,1,INSTR(title,' ',1,1))
HAVING COUNT(*) >= 20;
Результаты после запуска: 539 rows selected. Elapsed: 00:00:00.22
мне нужно улучшить производительность этого и создан function-based index
так, как:
CREATE INDEX INDX_FIRSTWRD ON FILM(SUBSTR(title,1,INSTR(title,' ',1,1)));
После выполнения того же запроса в верхней части этот пост, я все равно получаю такую же производительность: 539 rows selected. Elapsed: 00:00:00.22
Не применяется ли индекс или перезаписывается, или я делаю что-то неправильно?
Спасибо за любую помощь, которую вы могли бы предоставить. :)
РЕДАКТИРОВАТЬ:
Execution Plan:
----------------------------------------------------------
Plan hash value: 2033354507
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20000 | 2968K| 138 (2)| 00:00:02 |
|* 1 | FILTER | | | | | |
| 2 | HASH GROUP BY | | 20000 | 2968K| 138 (2)| 00:00:02 |
| 3 | TABLE ACCESS FULL| FILM | 20000 | 2968K| 136 (0)| 00:00:02 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(COUNT(*)>=20)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
471 consistent gets
0 physical reads
0 redo size
14030 bytes sent via SQL*Net to client
908 bytes received via SQL*Net from client
37 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
539 rows processed
Означает ли в плане запроса, что индекс используется? Поскольку вам нужно читать каждую строку из таблицы (или индекса), я бы не ожидал, что индекс будет очень полезен, если таблица 'film' существенно больше индекса. –
@JustinCave Как показать план запроса для этого запроса, потому что, когда я ввожу EXPLAIN PLAN FOR перед запросом, я просто получаю результат Explained. – FirstLegion
Если вы используете SQL * Plus, запустите 'set autotrace on' перед запуском вашего оператора. Какую версию Oracle вы используете? –