Оптимизация полнотекстового поиска по нескольким таблицам

Мне нужно выполнить поиск в нескольких разных таблицах в моей базе данных SQL Server. И мне нужно отсортировать результаты в зависимости от того, в какой таблице произошло совпадение.

Подход, который я использовал, показан ниже. Однако это не кажется очень эффективным, поскольку объем данных растет.

Может ли кто-нибудь предложить какие-нибудь уловки для оптимизации?

-- Full-text query
DECLARE @FtsQuery nvarchar(100)
SET @FtsQuery = 'FORMSOF(INFLECTIONAL, detail)'

-- Maximum characters in description column
DECLARE @MaxDescription int
SET @MaxDescription = 250

SELECT 1 AS RankGroup, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) AS Description FROM Table1
    INNER JOIN CONTAINSTABLE(Table1, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table1.Id
UNION SELECT 2, FTS.Rank, Id, Title, NULL FROM Table2
    INNER JOIN CONTAINSTABLE(Table2, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table2.Id
UNION SELECT 3, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table3
    INNER JOIN CONTAINSTABLE(Table3, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table3.Id
UNION SELECT 4, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table4
    INNER JOIN CONTAINSTABLE(Table4, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table4.Id
UNION SELECT 5, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table5
    INNER JOIN CONTAINSTABLE(Table5, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table5.Id
ORDER BY RankGroup, Rank DESC

Я рассмотрел одну из идей - создать индексированное представление, а затем выполнить поиск в этом представлении. Но поскольку представлению потребуются эти UNION , трудно понять, как это будет более эффективно.

5
задан Jonathan Wood 19 January 2012 в 20:07
поделиться