对于搜索页面,我需要前 10 个结果和查询的总结果数。
那部分很简单:
SELECT TOP(10) ... FROM ... WHERE ... ORDER BY ...
SELECT COUNT(*) FROM ... WHERE ...
但它也非常缓慢。两个陈述都需要大约相同的时间。
所以我找到了这个:
SELECT TOP(10) ... FROM ... WHERE ... ORDER BY ...
SELECT @@ROWCOUNT
这将时间缩短了约 50%。伟大的。但不幸的是,返回的行数是 10。如果我删除“TOP(10)”行数是正确的,但时间跨度与原始版本中的时间跨度或多或少相同。(即使我只访问前 10 行。)
这令人沮丧,因为总行数信息必须存在,即使在 TOP(10) 版本中也是如此。(至少我是这么认为的,因为我们使用了一个非常复杂的 ORDER BY 子句,用 3 个“CASE”条件将空数据排到底)
有没有一种有效的方法来获得两者?TOP(10) 数据和总数?