2013-04-08 3 views
0

Для базы данных DB2 Рассмотрим Таблица tbl (colA, colB, colC) и запросы какmultple индексы тот же столбец SQL

select * 
from tbl 
where tbl.colA = 1234. 

select * 
from tbl 
where tbl.colA =1234 
and tbl.colB = 73874 

Будет ли это поможет, если мы создадим два индекса I) на colA II) композит - colA,colB

Если вышеупомянутые sql-ы часто доступны, то это поможет иметь два индекса, как указано выше. Будет ли optemizer выбрать правильный индекс, основанный на запросе. Спасибо,

+2

Сводный индекс должен использоваться для любых запросов, которые используют любой префикс индекса. Таким образом, второй индекс поможет обоим запросам. – Barmar

ответ

2

Вам нужен только индекс (ii). Составной индекс используется всякий раз, когда данные поиска находятся в префиксе столбцов. Таким образом, индекс на colA,colB,colC,colD будет использоваться при поиске colA, colA and colB, colA, colB, and colC и colA, colB, colC, and colD.

+0

Кроме того, при создании индекса важно поставить правильный порядок столбцов. Если индексом является ColB, ColA, тогда il будет использоваться как индекс sargable, и это не так эффективно, как ColA, ColB. – AngocA

+0

Расширение выше Barmar и AngocA, для составного индекса (COLA, COLB), если есть запрос select * from tbl где colB = 3456. Будет ли использоваться индекс для этого запроса. –

+0

Нет, если предложение WHERE не использует префикс индекса, индекс вообще не может быть использован для него. Подумайте о составном индексе как древовидной структуре - вы не можете найти B до тех пор, пока вы не выберете родителей A. – Barmar

Смежные вопросы