我有一张包含近3000 万条记录的表。只有几列。其中一列的不同值'Born'
不超过30 个,并且在其上定义了一个索引。我需要能够过滤该列并有效地翻阅结果。
现在我有(例如,如果我正在搜索的年份是“1970” - 它是我的存储过程中的一个参数):
WITH PersonSubset as
(
SELECT *, ROW_NUMBER() OVER (ORDER BY Born asc) AS Row
FROM Person WITH (INDEX(IX_Person_Born))
WHERE Born = '1970'
)
SELECT *, (SELECT count(*) FROM PersonSubset) AS TotalPeople
FROM PersonSubset
WHERE Row BETWEEN 0 AND 30
这种类型的每个查询(仅Born
使用参数)都会返回超过 100 万个结果。我注意到最大的开销是用于返回总结果的计数。如果我(SELECT count(*) FROM PersonSubset) AS TotalPeople
从 select 子句中删除,整个事情会加快很多。
有没有办法加快该查询中的计数。我关心的是返回分页结果和总数。