mssql sqlserver 数据检索时 扫描次数(“Scan count”)太高的优化方法分享


摘要:
下文讲述sqlserver数据库查询数据时,scan count过高的处理方法分享,如下所示:
实验环境:sql server 2008 R2


原SQL语句如下:

SELECT  a.*
FROM tableName a WITH(NOLOCK)  
INNER JOIN tableNameExtend  b WITH(NOLOCK) 
   ON a.keyId=b.keyId   
WHERE a.writeDate >@d   
ORDER BY a.writeDate DESC 

针对以上的脚本可以使用以下的优化方法:

优化方法1:
将inner join 修改为exists

   SELECT  a.*
FROM tableName a WITH(NOLOCK)  
 
INNER JOIN tableNameExtend  b WITH(NOLOCK) 
   ON a.keyId=b.keyId   
WHERE 
  exists (select null from tableNameExtend b with(nolock) 
          where b.keyId = a.keyId 
         ) 
 and a.writeDate >@d   
ORDER BY a.writeDate DESC 


优化方法2:
针对表a,进行相关设置

针对表a中的keyId和writeDate设置相关的索引

优化方法3:
针对表a,返回信息进行处理

3.1:检测返回数据是否包含 大字段 text image
3.2:将a.*换成 a.field1,a.field2 …
3.3:将a.*返回的行数进行限制
3.4:剔除排序字段,检测一下数据检索的速度


相关阅读:
mssql sql server 限制返回结果行数的三种方法