Если вы выполняете DBCC SHOW_STATISTICS для своей таблицы и используемого индекса, ищите «String Index = YES» в первой строке вывода. SQL Server поддерживает некоторую дополнительную статистику для удовлетворения запросов, таких как '% x'
В первом запросе вы, вероятно, увидите вычисленные скалярные значения - посмотрите в плане запроса LikeRangeStart ('%' + @ name + '%'). Индекс поиска против этих значений, в отличие от сканирования индекса против% sara%.
Как это работает, я не знаю. Почему SQL Server не настолько умен, чтобы преобразовать 'sara' в константу и выполнить запрос так же, как я не знаю. Но я думаю, что это происходит.
Против% sara% выполняет сканирование индекса, считывая весь индекс. Для% + @ name +% он создает вычисленные значения RangeStart / RangeEnd / RangeInfo и использует их для поиска индекса, используя преимущества дополнительной статистики строк.