当前位置:七道奇文章资讯数据防范MSSQL防范
日期: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运行得更快
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .