一些对SQL查询速度影响的因素

之前看了"Delphi学习"兄有关SQL语句查询效率的一篇文章(http://hi.baidu.com/delphistu/blog/item/5982e90370e15ee808fa93a2.html),自己也想试试效果。
实验对象:Adab 共有 76314条记录
declare @a datetime
declare @i int
set @a=getdate()
--这里加试验语句
--
如:select * from Adab
set @i=datediff(millisecond,@a,getdate()) --millisecond表示毫秒
print @i

结论1:Select * 语句对速度影响很大。
     select * from Adab 用时:35940  (共57个字段)
    select xhjm,xm,xjztdm,bdm,nj,dwdm from Adab  用时 4186
    select xhjm,xm  from Adab  用时1626
    select xm from Adab   用时830
   可以看得出每增加一个字段,时间会增加几乎是一倍。
    另外,返回的数据的长度也会影响时间:
  如  select sfzh from Adab 用时1580  几乎与select xhjm,xm from Adab相同。
因此,返回的数据量是影响速度最关键的因素。网络上的数据传送成了执行SQL最大的性能问题。
执行一个selec dwdm,count(xhjm) from Adab的语句,用时106 要汇总计算,但传送数据少,因此速度很快。

结论2 :索引的作用在SQL查询中order by 作用没有想像中大。
           但按聚集索引字段进行排序,效率最高。
           但对分组的影响较为明显。
   xhjm 为聚集索引,xm为非聚集索引
   select xhjm,xm,xjztdm,bdm,nj,dwdm from Adab
   order by xhjm  未建聚集索引时,用时4890  建立后4173 因此影响不是太明显。
   如果order by xm 没有索引时会5106 ,有索引为5093 影响甚小。
  
  对dwdm、bdm做了一个复合索引。
执行
  select dwdm,bdm ,count(xhjm) from Adab
group by dwdm,bdm
未建索引用时360 建立索引后是170 ,几乎是一倍的时间 。只对dwdm建索引是170 ,未建是76。
 
后续   
原文地址:https://www.cnblogs.com/samsonleung/p/1229625.html