你的位置:首页 > 数据库

[数据库]SQL Server在执行SQL语句时,表之间驱动顺序对性能的影响


环境:SQL Server2012 SP3 企业版,开发服务器,并没有什么负载,全库索引统一Rebuild过

 

经反复执行验证过,

不算太复杂的SQL(存储过程中代入参数抠出来的SQL代码)

 

 默认情况下,执行完成需要3秒钟

 非要用红色圈中子查询中的表(是一个相关子查询)去驱动其他表,

 

 

 添加OPTION(FORCE ORDER)后,强制连接顺序,用其他表驱动子查询,1秒钟

 

  默认情况下,IO消耗的比较少(相比强制驱动顺序),但是CPU消耗的比较多,但是整体时间的消耗比强制驱动顺序要多

  强制表的驱动顺序的时候,IO比默认情况下要打,但是,CPU消耗的比较少,整体上耗时较短

 

后记:

  我一直就怀疑一个问题,SQL Server内部评估执行计划的时候,IO的权重要比其他的资源权重要大,

  遇到不止一次两次类似问题了,

  SQL Server总是“喜欢”选择IO较小的执行方式去完成一个查询,但是这个查询方式,从时间上看,并不一定是最快的