Я использую образец базы данных из учебного пособия по SQL Server 2012, немного изучая индексы, поэтому я решил попробовать и посмотреть, как это работает.
В таблице Orders есть индекс shippostalcode, поэтому я попытался поместить его в предложение where, я знаю, что в этой таблице более 850 записей, и этот код хорошо разделен, например:
10328
10195
10342
10318
10196
10139
10294
10354
10199
10157
10137
10258
10274
10286
10158
10167
10329
10351
Итак, когда я делаю это, почему я получаю сканирование кластеризованного индекса, которое, как я читал, такое же, как сканирование таблицы, которое неоптимально?
ИЗМЕНИТЬ:
Я сделал :
SELECT [orderid]
,[shippostalcode]
FROM [TSQL2012].[Sales].[Orders]
WHERE shippostalcode = '10307'
Что дало мне поиск по индексу. Что наводит меня на мысль (из того немногого, что я узнал), что SQL Server может думать, что сканирование выполняется быстрее, чем поиск по закладкам для остальных столбцов?
РЕДАКТИРОВАТЬ 2:
Прочитав о переломном моменте здесь: http://www.sqlskills.com/blogs/kimberly/why-arent-those-nonclustered-indexes-being-used/
Там написано, что около 30%. Я использовал запрос отсюда, чтобы получить общее количество страниц в моей таблице:
Определение количества страниц в каждой таблице SQL без использования DBCC а>
У меня 49 б/у и 53 зарезервировано. Таким образом, 30% от 49 = 14,7 * 17 (каждая страница хранит столько же) составляет около 250 строк. Но мой запрос возвращал только 9, так что это было далеко не переломный момент.