读书频道 > 网站 > 网页设计 > SQL Server性能调优实战
3.3.2 排序的性能影响
15-11-02    下载编辑
收藏    我要投稿   

本文所属图书 > SQL Server性能调优实战

本书是一线DBA技术专家精心之作,积作者多年的经验结晶和最佳实践,也是目前市场上为数不多通过存储原理来讲解性能优化,剖析SQL Server架构,从而帮助读者快速高效调优数据库的图书。书中首先简要介绍了SQL S立即去当当网订购

ORDER BY子句的性能取决于参与排序操作的数据量的大小。

排序操作会在数据筛选完以后,对筛选出的结果集进行排序。因此,对于需要排序的查询,应将排序操作控制在结果集数据量尽量小的查询中,避免对大批量数据进行排序操作,这样可以避免不必要的CPU资源消耗,并且,当排序操作超过可以分配的内存大小时,会把排序的中间数据存放在Tempdb数据库中,这将增加I/O操作,导致语句的性能大大下降。

在不得不对大量数据进行排序操作的情况下,适当地创建一些索引对排序操作会有一定的帮助,例如代码清单3-3中的语句。

代码清单3-3 排序语句

SELECT
sod.OrderQty,
sod.ProductID
FROM Sales.SalesOrderDetail AS sod
WHERE sod.ProductID=870
ORDER BY sod.OrderQty DESC

对大批量数据进行查询时,其执行计划如图3-3所示,在只有聚集索引的情况下,从执行计划中可以看出,SQL Server首先会对SalesOrderDetail表进行一次表扫描,找出所需要的数据;然后对检索出来的数据进行一次Sort操作(操作中的主要开销都在聚集索引扫描中,大约占了87%,这里先不讨论该SQL语句的性能)。针对这个Sort操作,创建如下索引,代码如清单3-4所示。


 

代码清单3-4 创建非聚集索引

CREATE NONCLUSTERED INDEX IX_SalesOrderDetail_ProductId_OrderQty
ON Sales.SalesOrderDetail(ProductID,OrderQty)

重新执行代码,得到如图3-4所示的执行计划,当在ProductID及OrderQty字段上创建索引后,Sort操作便消失了,并且数据的读取操作也变成了Index Seek(后续章节中,会详细介绍Scan和Seek的差异)。


 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站