Проблема в том, что MSSQLServer не может заранее знать, что будет содержаться в переменной @Street
, поэтому он не может использовать индекс для столбца Street
.
Если ваш оператор:
select * from Postcodes where Street = 'London';
select * from Postcodes where Street like 'London Road%';
Может использоваться индекс для столбца Street
, поскольку он знает, что строка начинается с London
.
Если ваш оператор:
select * from Postcodes where Street like @VariableName;
Он не может использовать индекс, потому что с этим оператором вы должны иметь возможность:
select * from Postcodes where Street like 'London%';
select * from Postcodes where Street like '%London%';
Или любое другое допустимое значение для VariableName
.Это типичная проблема в предварительно скомпилированных инструкциях.
Что вы можете сделать, это использовать строку напрямую или не использовать параметры и изменить свой оператор на динамический оператор SQL в TSQL.