Обнаружил тут для себя два новых оператора, которые оказались весьма полезными и производительными по сравнению со своими аналогами типа
WHERE some_column like '%SearchSubText%'
Используется он так
SELECT TOP 360 CAST([ID] as nvarchar(36)) AS [ID], [Town], [Street], [Build]
FROM [some_table]
INNER JOIN CONTAINSTABLE([table_name], [Town], '"моск*"') AS KEY_TBL_T
ON [some_table].[ID] = KEY_TBL_T.[KEY]
WHERE [Region_ID] IN (77)
AND [some_table].[Street] like '%Широка%'
ORDER BY [some_table].[Rank] ASC, [Town], [some_table].[Street], [Build];
По сути, здесь конструкция
INNER JOIN CONTAINSTABLE([table_name], [Town], '"моск*"') AS KEY_TBL_T
ON [some_table].[ID] = KEY_TBL_T.[KEY]
равносильна [table_name], [Town] like 'моск%', за единственным исключением:
CONTAINSTABLE и CONTAINS работают с данными по full text index
И проблема с которой я столкнулся - не находятся записи, когда мы используем CONTAINSTABLE, в то же время, когда [table_name], [Town] like 'моск%' их находит.
Я подумал, что после перестроения full text index проблема уйдет, однако, это не помогло.
На время заменил like'ом, нужно дальше копать в чем причина.
No comments:
Post a Comment