Как использовать составной индекс в сценарии ниже - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть таблица ABC со столбцами X, Y, Z и индексом idx1 для (X,Y).

Как изменить приведенный ниже запрос, чтобы индекс былбыть использованы.

select * from ABC where Y = 'TEST';

Я пытался таким образом.Но это не работает.

select /*+ index(ABC idx1) */ * from ABC where Y = 'TEST';

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Индекс на (X, Y) нельзя использовать для поиска для конкретных значений Y.

Подумайте о каталоге телефонной книги, похожем на белые страницы.Он индексируется (сортируется) по (Фамилия, Имя).

Как бы вы использовали этот каталог для поиска всех людей с именем (Боб)?Единственный способ - сканировать весь индексный ряд за строкой.

Однако, если вам нужно выполнить поиск (Смит, Боб), вы можете легко искать страницы Смита, а затем в этихбыстро найдите всех ваших Бобов в алфавитном порядке.

Если вам нужно искать только значения Y, вам понадобится индекс с Y в качестве первого ключа.

HTH.

0 голосов
/ 30 ноября 2018

Вы сказали, что ваш индекс связан с 2 столбцами, X и Y.

Но ваше предложение WHERE относится только к столбцу Y, следовательно, индекс не используется, дажеесли вы используете подсказку.

Либо:

  • измените предложение WHERE для фильтрации по столбцам X и Y

  • ИЛИ создать индекс только для столбца Y

Правильное решение зависит от вашего функционального варианта использования.В обоих случаях вам не понадобится подсказка.

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