当SQL Query跑得很慢的时候, 这是件多么美妙的事情...
每天清晨,慵懒地来到公司,机械化的点开SQL客户端,华丽地按下更新数据按钮。然后倒水泡茶,上开心,逛论坛,吃饭聊天。。。转眼夕阳西下。哇!数据更新完毕。套用模板,发出Report,回家吃饭。
多么令人艳羡的工作。但是我的Query没有跑得那么慢啊!没关系,看完本文你一定能让你的Query跑得更慢!(#大误)
言归正传,Butter将为你逐步揭示SQL语句性能调优办法。首先让我们来看影响SELECT语句性能的三座大山 (排名绝对分先后,影响力以指数级下降):
Random IO
Random IO是性能的最大杀手,一次Random IO往往意味着一次HardDisk 的Seek Time。一般桌面电脑的seek time在9ms左右取决于硬盘的RPM。至于服务器seek time 可以下降到3ms。
3ms以为着什么? 以现在较为常规服务器磁盘每秒300MB的传输率计算,3ms可以读0.9MB数据,也就是900K。以一个Page 8KB计算,假设每一个page存100条记录,3ms 可以大约读取10,000条连续数据记录~~~~10,000条连续数据记录~~~~~回音
换句话说,每当服务器进行一次Random IO,需要省下读取10,000条连续数据的时间才有赚不亏。(画外音1: 不考虑空间问题,Non-Cluster Index实际上就是做了