WEB开发网
开发学院数据库MSSQL Server SQL2005性能分析一些细节功能你是否有用到?(三) 阅读

SQL2005性能分析一些细节功能你是否有用到?(三)

 2010-10-01 10:19:40 来源:WEB开发网   
核心提示: 2:<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序,有关详细信息,SQL2005性能分析一些细节功能你是否有用到?(三)(3),请参阅 ORDER BY 子句 (Transact-SQL),当在排名函数中使用 <order_by_cl

2:<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。

返回类型:bigint 

备注:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

本节意图:以前我一直有一个误区,就是认为只要是分页时按需所取(查询第几页就取第只取几页的数据),效率就会特别高,后来用上了IO分析,才知道并不像我想像中的那样完美(取任何一页速度都是一样快).

案例:

--取第一页

(20 row(s) affected)

Table 'Card_Ext'. Scan count 1, logical reads 92, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

--取第一百页

(20 row(s) affected)

Table 'Card_Ext'. Scan count 1, logical reads 8157, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

--取第一万页

(20 row(s) affected)

Table 'Card_Ext'. Scan count 1, logical reads 81322, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

解决方案:大数据分页中,无论你采用什么样的分页算法,都会出现性能瓶颈,所以可以采用top n的方法来折中一下:当实际查询结果特别多时,只选取前n条.

本节结论: 上面的结果都是在已经有数据缓存的情况下运行的结果,所以只看到了逻辑读,并没有出现物理读取的记录.记录显示,逻辑读数量在不断变化,根据用户取的页数大小成倍增加,也就是说与页数大小成正比.原因是row_number()的产生是在数据全部查询出来后再按照排序顺序从一开始生成的,所以它要把页数之前的所有数据都先装成内存,才能生成.

这样就非常直接的回答了为什么取数据越到最后速度越慢的原因了.

顺便说下在运用sp_help命令时,是不能同时运行执行计划的.否则会报这样的错:Msg 262, Level 14, State 4, Procedure sp_help, Line 88 SHOWPLAN permission denied in database 'master'.

总结:性能调优是一项特别细的工作,往往更改一个小小的语句性能就会发生翻天覆地的变化;要在不断的实践中总结经验。

相关文章:

SQL2005性能分析一些细节功能你是否有用到?(三)

SQL2005性能分析一些细节功能你是否有用到?(二)

SQL2005性能分析一些细节功能你是否有用到?

上一页  1 2 3 

Tags:SQL 性能分析 一些

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接