Как использовать подсказки при использовании типа '%%' в Oracle? Он использует индекс, но не работает - PullRequest
1 голос
/ 10 июля 2020

У меня есть таблица с именем TB_STUDENT, в которой есть два поля с именами STUDENT_NAME, STUDENT_ID, STUDENT_NUMBER и по крайней мере 100000 строк данных. Теперь я создал два индекса и хочу найти учащегося по имени student_name. У меня есть подсказка, но кажется, что она все еще TABLE ACCESS FULL. Как изменить мой SQL?

 CREATE index  IDX_STUDENT_ID ON CUST (STUDENT_ID);
 CREATE index IDX_STUDENT_NAME ON CUST (STUDENT_NAME);
 SELECT  /*+ INDEX(IDX_STUDENT_ID ,IDX_STUDENT_NAME ) */STUDENT_ID,STUDENT_NAME FROM TB_STUDENT S WHERE STUDENT_NAME LIKE '%LUSY%';

1 Ответ

2 голосов
/ 10 июля 2020

Индекс хранит данные в отсортированном дереве, что упрощает поиск. Для столбцов varchar это означает, что данные отсортированы лексикографически. Было бы разумно использовать индекс, если бы у вас был подстановочный знак в конце (или даже в середине) строки, но здесь у вас есть подстановочный знак в начале строки, что означает, что значение может быть где угодно в индексе. В таком случае, когда использование индекса не дает преимуществ перед сканированием всей таблицы, оптимизатор решит не использовать индекс. Подсказки - это то, что предполагает их название - подсказки - и не могут заставить оптимизатор использовать индекс в недопустимом сценарии использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...