В Oracle будет ли по-прежнему использоваться составной индекс, если предложение where содержит некоторые дополнительные поля? - PullRequest
2 голосов
/ 05 марта 2010

Допустим, у меня есть составной индекс для таблицы, которая индексирует 4 поля.

create index idx_comp_index
on mytable ( fielda, fieldb, fieldc, fieldd );

Если я сделаю запрос к этой таблице, используя все четыре из этих полей в предложении where плюс дополнительное поле или два, будет ли индекс по-прежнему использоваться?

select *
from mytable
where fielda = 'i'
  and fieldb = 'love'
  and fieldc = 'vim'
  and fieldd = 'so'
  and fielde = 'much';  -- additional field not indexed

Ответы [ 2 ]

3 голосов
/ 05 марта 2010

Ответ: «это зависит». Лучший способ определить такие вещи - взглянуть на план оптимизатора, который сообщит вам план запроса и используемые индексы.

Проверьте "объяснить план" в Google.

Будет ли Oracle использовать индекс в основном, зависит от того, определит ли оптимизатор, что использовать индекс дороже, чем не использовать его. В некоторых случаях оптимизатор может определить, что быстрее не использовать индекс, и в большинстве случаев оптимизатор совершенно прав.

Еще одна вещь, которую необходимо учитывать, - убедиться, что в ваших таблицах обновлена ​​статистика, поскольку именно это оптимизатор использует для определения плана запроса.

0 голосов
/ 05 марта 2010

Конечно, , если использует индекс:

select *
from mytable
where fielda = 'i'
  and fieldb = 'love'
  and fieldc = 'vim'
  and fieldd = 'so';

тогда я не вижу причин, почему это не будет:

select *
from mytable
where fielda = 'i'
  and fieldb = 'love'
  and fieldc = 'vim'
  and fieldd = 'so'
  and fielde = 'much';  -- additional field not indexed

Если вместо «select *» у вас было «select fielda», то на запрос без поля можно было бы ответить, используя только индекс, тогда как на запрос с полем не удалось.

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