【发布时间】:2015-12-17 10:51:46
【问题描述】:
这是对全文查询的简单搜索
WITH xx AS
(
SELECT
kh.* ,
ROW_NUMBER() OVER ( ORDER BY kh.Id ) AS RowNo
FROM
KhachHang kh
WHERE
CONTAINS (kh.Ten, 'hoang and van and ngan')
AND kh.TrangThai = 1
)
SELECT xx.*
FROM xx
只有在添加Where 子句时才会出现问题
WITH xx AS
(
SELECT
kh.* ,
ROW_NUMBER() OVER ( ORDER BY kh.Id ) AS RowNo
FROM
KhachHang kh
WHERE
CONTAINS (kh.Ten, 'hoang and van and ngan')
AND kh.TrangThai = 1
)
SELECT xx.*
FROM xx
--- This is key that create the difference
WHERE xx.RowNo > 0 AND xx.RowNo <= 100
这种差异使后一个查询的运行速度慢了大约 20 倍。
我检查了执行计划并注意到 Index Seek 和 Scan 之间的区别。但即使我用 WITH FORCESEEK 更改了后者,结果也是相似的。
我的生产数据库中有 800 万条记录。
非常感谢任何帮助和建议。
【问题讨论】:
-
您的选择,将其放入临时表并在 RowNo 列上建立索引,您应该做的第一件事
-
感谢@Veljko89。你的建议确实解决了问题。但是您将其添加为评论,因此我无法提出答案。
-
很好……很高兴能帮上忙。祝你未来好运
标签: sql sql-server full-text-search