日期:2011-05-02 15:22:00 来源:本站整理
让你的SQL运行速度明显提高[MSSQL防范]
本文“让你的SQL运行速度明显提高[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
人们在利用SQL时常常会陷入一个误区,即太关注于所得的后果能否精确,而忽视了差别的实现办法之间大概存在的性能差别,这种性能差别在大型的或是复杂的数据库环境中(如联机事件处理OLTP或抉择支持系统DSS)中表现得尤为明显.笔者在工作实践中发现,不良的SQL往来往自于不得当的索引计划、不充份的衔接条件和不可优化的where子句.在对它们举行得当的优化后,其运行速度有了明显地提高!下面我将从这三个方面辨别举行总结:(为了更直观地阐明问题,全部实例中的SQL运行时间均经过测试,不超越1秒的均表示为(< 1秒). )
1、不公道的索引计划
例:表record有620000行,试看在差别的索引下,下面几个 SQL的运行情形:
1.在date上建有一非个聚集索引
select count(*) from record where date >
''19991201'' and date < ''19991214''and amount >
2000 (25秒)
select date,sum(amount) from record group by date
(55秒)
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'') (27秒)
解析:
date上有大量的反复值,在非聚集索引下,数据在物理上随机存放在数据页上,在范围查找时,必须履行一次表扫描才能找到这一范围内的全部行.
2.在date上的一个聚集索引
select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 (14秒)
select date,sum(amount) from record group by date
(28秒)
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')(14秒)
解析:
在聚集索引下,数据在物理上按次序在数据页上,反复值也布列在一同,因而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范围扫描,提高了查询速度.
3.在place,date,amount上的组合索引
select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 (26秒)
select date,sum(amount) from record group by date
(27秒)
select count(*) from record where date >
''19990901'' and place in (''BJ, ''SH'')(< 1秒)
解析:
这是一个不很公道的组合索引,因为它的前导列是place,第一和第二条SQL没有引用place,因此也没有操纵上索引;第三个SQL利用了place.
4.在date,place,amount上的组合索引
select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000(< 1秒)
select date,sum(amount) from record group by date
(11秒)
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')(< 1秒)
解析:
这是一个公道的组合索引.它将date作为前导列,使每个SQL都可以操纵索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能到达了最优.
5.总结:
缺省情形下成立的索引是非聚集索引,但有时它并非最佳的;公道的索引计划要成立在对各种查询的解析和猜测上.普通来说:
①.有大量反复值、且常常有范围查询
(between, >,< ,>=,< =)和order by、group by发生的列,可考虑成立聚集索引;
②.常常同时存取多列,且每列都含有反复值可考虑成立组合索引;
③.组合索引要尽大概使关键查询形成索引覆盖,其前导列一定是利用最频繁的列.
本新闻共2页,当前在第1页??1??2
以上是“让你的SQL运行速度明显提高[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
若何让你的SQL运行得更快
让你的SQL运行速度明显提高
让你的SQL运行得更快
以上是“让你的SQL运行速度明显提高[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论