选择前1000名,但知道有多少行?

csm*_*mba 3 sql performance sql-server-2005

SQL Server 2005

我在DB中有1000万行,并运行一个select(有很多"where"和关节......非常复杂).结果以网格形式呈现(想想goolge结果),因此,用户不可能使用超过1000个结果.

所以我用一个TOP 1000来限制我的SQL.

问题:用户仍然想知道他的搜索有5432个结果.

我是否可以在不付出代价的情况下获得该信息(换句话说,仍然获得"前1000名"给我的速度优势?)

假设 - 假设TOP 1000在100K行中带来1000 个.因此即使是移动100K的网络价格也可能是一个问题.

结论 没有免费的午餐!你可以得到优雅的方式(接受的答案),但它仍然需要更昂贵的操作(即计算所有结果).在现实生活中,我将使用2 SQL方法,一个返回前1000行进行显示,一个是ASYNC,并使用count(*)结果更新一些AJAX面板,这将花费更长的时间到计算机

Dav*_*kle 10

SELECT TOP 1000 x, y, z, COUNT(*) OVER () AS TotalCount
FROM dbo.table
Run Code Online (Sandbox Code Playgroud)


Nei*_*ell 5

就个人而言,我会选择两个声明来访问数据库.一个用于检索计数,一个用于检索前1000个记录.

您可以批量运行两个查询,通过保存数据库的往返来挤出一些额外的性能.

-- Get the count
select count(*) from table where [criteria]

-- Get the data
select [cols] from table where [criteria]
Run Code Online (Sandbox Code Playgroud)