SQL2005 ROW_NUMBER分页

huang   发表时间:2009-06-18 16:43:56   分类:建站知识   浏览( )   评论( )   收藏日志
添加到网摘:

SQL Server 2005之后,令人困扰的分页问题似乎有了进展,那就是用ROW_NUMBER(),典型的语句如下
SELECT *
FROM
(
SELECT *,ROW_NUMBER() OVER (ORDER BY XXX) AS RowNo
FROM tbl
) AS A
WHERE RowNo >= 11 and RowNo <= 20;

但这里忽略了一个重要的问题,那就是中间那个SELECT语句,实际上相当于做了一个SELECT *,虽然没在结果集看到,但没看到不表示数据库没做。
为什么看起来查询很快,其实是因为后面的RowNo的范围,网上流传的示例RowNo都较小,所以看不出问题,在上例中,SQL Server发现后面的条件之后,中间的SELECT被作了类似TOP 20的处理,也就是只取了20行,所以查询非常快。但把RowNo的查询范围改为10000000到1000010之后,则相当于先TOP 10万行,这时速度就明显慢下来了。

所以说,这个表达式的本质只是先TOP X,再选出X-y,X这个小范围的行,相比以前并没有什么进步。

正在读取日志的评论数据,请稍后……
正在加载日志评论签写框,请稍后……
溜溜show会员登录
正在载入溜溜show会员登录...
溜溜show 日志归档
溜溜show 最新评论
{$SideComment}
溜溜show 最新留言
{$SideGB}
溜溜 阿里妈妈广告