【发布时间】:2012-02-14 11:49:23
【问题描述】:
我需要在我的 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
我考虑过的一个想法是创建一个索引视图,然后对视图执行搜索。但由于视图需要这些UNIONs,很难看出这将如何更有效。
【问题讨论】:
-
您可以安全地进行的一个简单优化是将
UNION替换为UNION ALL。欲了解更多信息:stackoverflow.com/questions/49925/…
标签: sql-server sql-server-2008 full-text-search