我正在使用带有SQL Server 2008 SP2的asp.net
我有一个启用了全文搜索的表。
我的硬件是:2GHZ四核,4GB RAM,SAS硬盘。
该表包含 500万条记录,其结构为:
Pages table:
ID (INT)
GroupID (INT)
GroupStart (bit)
Col1 varchar(900)
Col2 nvarchar(450)
Col3 nvarchar(450)
Col4 nvarchar(450)
Col5 nvarchar(450)
我在主键ID上有一个fts索引。
我正在使用以下查询来搜索表格:
SELECT * FROM (
SELECT * , ROW_NUMBER() OVER( ORDER BY KEY_TBL.Rank DESC ) AS RowNumber , COUNT(*) OVER() as TotalRows
FROM Pages p
INNER JOIN
CONTAINSTABLE(Pages, *,N' FORMSOF (INFLECTIONAL, movies)') AS KEY_TBL
ON p.ID = KEY_TBL.[KEY]
WHERE (p.GroupID IS NULL OR p.GroupStart = 1)
) LS
WHERE RowNumber BETWEEN 0 AND 10
ORDER BY RowNumber ASC;
如果总行数约为500,则查询需要 1s 才能完成。
如果总行数约为10,000,则需要 5s 才能完成。
如果总行数约为100,000,则需要 60s 才能完成。
知道为什么查询花了这么长时间?
我的查询,sql server是否有问题或是硬件问题?
答案 0 :(得分:1)
全文搜索仅对在varchar或文本字段中搜索文本很有用,它不会加快查询速度。您需要向表中添加更多索引才能执行此操作。
通常,查询看起来过于复杂,但您没有解释查询需要执行的操作。我认为需要优化查询。
答案 1 :(得分:1)
考虑限制CONTAINSTABLE返回的匹配数 - > CONTAINSTABLE(Pages, *,N' FORMSOF (INFLECTIONAL, movies)', 100 )