2016-03-07 2 views
5

У меня есть основной вопрос об индексе сканирования/поиска. Индексная развертка эффективна при большом количестве строк. То есть стоимость сканирования индекса обратно пропорциональна количеству возвращаемых строк. Это меньше количества строк, которые дороже, чем запрос, так как он должен сканировать все страницы, что приводит к большему количеству ввода-вывода.Почему поиск индекса становится дороже, чем сканирование индекса

Я искал причину, по которой искатели стали дороже, чем сканы, но я не могу получить причину, по которой поиск становится дорогим.

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

select id,name,col1,col2 
from TableA -- Will result in index scan. Table has 10000 rows with clustered index on ID column. Query has covering index. 

select id,name,col1,col2 
where ID between 1 and 10 
from TableA -- Optimizer Will use index Seek. 

Теперь почему ниже запрос становится дорогим, когда индекс стремятся навяжут -

select id,name,col1,col2 
from TableA with (forceseek) 
+0

может быть [это] (http://blog.sqlauthority.com/2007/03/30/sql-server-index-seek-vs-index-scan-table-scan/) помогает !!! – Praveen

+0

Квалификационные накладные расходы могут быть причиной – Ian

+0

Что содержится в индексе? Только идентификатор? Является ли это кластеризованным индексом? Если нет, то ключевой поиск, необходимый для получения других столбцов, станет причиной удара производительности. – strickt01

ответ

2

Причина, почему кластерный индекс Seek является дорогостоящим, чем индекс сканирования, потому что индекс искать начинается чтение права B дерева от корневых узлов до узлов листа. Это включает в себя чтение индекса и страниц внутри узлов листа. Следовательно, это приводит к большему количеству ввода-вывода. Поэтому, когда избирательность меньше оптимизатора, вы выбираете сканирование индекса вместо поиска индекса. Лучше искать только тогда, когда возвращаемые записи не превышают 2 - 3%.

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