Как оптимизировать JOIN ON LIKE '%' + name + '%' - PullRequest
1 голос
/ 08 ноября 2010

Мой запрос выглядит так:

SELECT * 
  FROM dbo.TestTable TT
  JOIN dbo.fnListParseAndSplit('test,tt,zz,er,ts',',') L ON TT.Name like '%' + L.ListMember + '%'

Моя проблема заключается в том, что в плане выполнения я всегда получаю Индексный поиск для обоих случаев при присоединении:

  1. T.Наименование как '%' + L.ListMember + '%'

  2. T.Название как L.ListMember + '%'.

Я придерживался мнения, что они совершенно разные, и когда объединение похоже на «%» + L.ListMember + «%», я должен получить сканирование индекса.Я правильно понял план выполнения?Или SQL Server 2008 настолько умен, что может оптимизировать мой запрос?

Я приложил план выполнения.Знаете ли вы, почему у меня есть поиск индекса по столбцу Имя TestTabe?Столбец имени имеет уникальный индекс ... но в этом случае я ожидал бы сканирование вместо поиска.

http://softrun.ro/executionplan.png

1 Ответ

1 голос
/ 09 ноября 2010

Поиск по индексу связан с первой частью объединения, если вы посмотрите на опубликованный план, вы увидите сканирование таблицы для вывода вашей функции синтаксического анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...