like и использование индекса
От: Щербатов Евгений  
Дата: 19.10.05 11:11
Оценка:
Господа доброго времени суток.

Имею
SQL Server 2000
БД и табличку в ней.

БД и таблица создавались таким образом, чтобы можно было вести регистрозависимый поиск (like).

В таблице есть поле F1 и индекс на него. Записей в таблице 1 500 000.

Я выполняю следующий запрос select top 1 ID where F1 like 'Э%' и этот запрос отрабатывает очень быстро. План запроса указывает, что у меня используется необходимый индекс и ему делается Index Seek. Причем, в таблице все записи поля F1 начинаются с 'Э', поэтому он так быстро и отрабатывает.

Если же я укажу следующий запрос select top 1 ID where F1 like 'э%' — буковка стала маленькой. То он будет выполняться достаточно долго (около 7 секунд). В результате скажет, что таких записей нет и будет прав — их действительно нет. План запроса по-прежнему указывает на Index Seek. Вот собственно вопрос:

В чем заключается Index Seek и как он работает, если для такого глупого запроса нужно столько времени? Похоже тут идет тупое сканирование таблицы. Потому как если бы это был поиск делением отрезка пополам, например, то отработал бы он мгновенно. Такое ощущение, что индекс все же не используется.

Объясните пожалуйста что происходит?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.