2015-09-11 2 views
1

Я создал некластеризованный индекс в комбинации из трех столбцов. Нужно ли указывать все три столбца, в которых условие используется для некластеризованного индекса.Использование некластеризованного индекса для эффективного поиска

+0

Я так не думаю. Но для того, чтобы этот индекс использовался, первый столбец должен быть в предложении 'WHERE'. –

ответ

1

Для того, чтобы использовать свой индекс, вы должны использовать это.

индекс: Ix_threecols (c1, c2, c3)

1. select c1,c2,c3 from table where c1=val 
and c2=val and c3=val 
2. select c1,c2,c3 from table where c1=val 
and c2=val 
3. select c1,c2,c3 from table where c1=val 

Ваш самый левый первый столбец индекса следует использовать в ИНЕКЕ. Пожалуйста, не используйте (*) в своем выборе, так как это может привести к сканированию индекса.

Мы должны проверить план выполнения для более подробного анализа.

+0

Что делать, если я использую где c1 = val или c2 = val – gkarya42

+0

Вы можете использовать это как это, но это будет сканирование индекса, если вы используете 'или' – StackUser

1

Короткий ответ - нет.

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

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