При выполнении следующего запроса (SQL Server 2000) план выполнения показывает, что он использовал поиск по индексу, а Profiler показывает, что он выполняет 71 чтение с длительностью 0.
select top 1 id from table where name = '0010000546163' order by id desc
Сравните, что при следующем использовании индексное сканирование выполняется с 8500 чтениями и длительностью около секунды.
declare @p varchar(20)
select @p = '0010000546163'
select top 1 id from table where name = @p order by id desc
Почему план выполнения отличается? Есть ли способ изменить второй метод поиска?
спасибо
EDIT
Таблица выглядит как
CREATE TABLE [table] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (13) COLLATE Latin1_General_CI_AS NOT NULL)
Идентификатор - это первичный кластерный ключ.
Существует неуникальный индекс по имени и уникальный составной индекс по идентификатору / имени
Есть и другие столбцы - опущу их для краткости