好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

百万数据下几种SQL性能测试

百万数据下几种SQL性能测试

今天闲来学习了一下SQL性能优化方面的知识,有以下学习收获,欢迎大家指点。

测试前清除缓存

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

一、翻页性能测试

MsSql翻页性能测试

ID列索引

Top

Max/Top

row_number()

无索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

聚焦索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

非聚焦索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

结论:

1)从以上测试结果可以看出,不论是否索引排序字段,也不管是何种索引,row_number都能得到最高的性能,其次Max/Top的方式测试性能也不错。

2)在使用非聚焦索引的情况下,性能并无任何提示,甚至要慢于无索引的情况,可能是因为SQL先要去查找索引表,然后根据索引结果再去查找实体表,在这过程浪费了资源。

3)聚焦索引也的正确应用才能发挥其该有的优势啊!

综合结果:row_number> max/top > top

二、in、or、union关键字性能测试

介于网上有很多关于in/or/union等关键字的性能讨论,本人也小试了一把,测试结果如下。

 1、in

 select * from video where id in(100,101,102,103,104,105,106,107,108,109)

2、union

3、or

in PK or PK union

 

ID列索引

in

union

or

无索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

聚焦索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

非聚焦索引

cpu

reads

duration

cpu

reads

duration

cpu

reads

duration

结论:

1)  网上很多资料说union的性能要高于in/or,但从我这测试的结果来看,不论是有无索引,union的性能都是最低的?不知是何原因?

2)  网上流传mssql会自己把in解析成or查询,从这份测试结果来看,貌似不假!

3)  虽然in/or会引起全表扫描,但别无选择的情况下也是是能胜任很多工作的。

第一次分享技术类的文章,写的不好欢迎拍砖,谢谢!

http://www.vhaoxue.com

 

 

标签:  sql ,  性能测试 ,  sql翻页

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于百万数据下几种SQL性能测试的详细内容...

  阅读:43次