【发布时间】:2011-07-17 04:29:33
【问题描述】:
stackoverflow 上有很多 sql server 分页问题,其中很多都在谈论使用ROW_NUMBER() OVER (ORDER BY ...) AND CTE。一旦您进入数十万行并开始对非主键值添加排序并添加自定义 WHERE 子句,这些方法就会变得非常无效。我有一个数百万行的数据集,我试图通过自定义排序和过滤进行分页,但我的性能很差,即使在我排序和过滤的所有字段上都有索引。我什至在每个索引中都包含了我的 SELECT 列,但这几乎没有帮助,并且严重膨胀了我的数据库。
我注意到无论您点击什么排序标准或页码,stackoverflow 分页只需要大约 500 毫秒。任何人都知道如何在具有数百万行的 SQL Server 2008 中有效地进行分页工作?这包括尽可能高效地获取总行数。
我当前的查询与这个关于分页的 stackoverflow 问题具有完全相同的逻辑: Best paging solution using SQL Server 2005?
【问题讨论】:
-
我认为 stackoverflow 使用 nosql db。也许是内存缓存。
-
您可以发布查询;一般原则是个好人,但他在现实世界中有问题;)
-
不要在您想要排序(或过滤)的每一列上添加索引,帮助?这对我来说似乎很明显,但我不知道你是否尝试过。
-
我在所有列上都有索引。在超过最初的几千个分页之后,查询时间开始线性上升......
-
SO 也在使用 Lucene,所以我想这些查询没有到达 SQL 服务器。
标签: sql-server pagination