您好,欢迎访问一九零五行业门户网

SQL优化之not in

阅读目录 一直从事运维的工作,免不了优化一些sql语句,因为本人比较懒的原因,很多经典的案例没有记录下来,深表遗憾 案例语句 某大型房地产公司,巡检日期2013-04-22,问题语句 ( * ) .application , 3 count ( * ) as usercount 4 from ( select f.applic
阅读目录
一直从事运维的工作,免不了优化一些sql语句,因为本人比较懒的原因,很多经典的案例没有记录下来,深表遗憾
案例语句某大型房地产公司,巡检日期2013-04-22,问题语句
(*).application , 3count(*) as usercount 4from( select f.application 5frommyuserrights urmyfunction f on ur.objecttype = f.functioncodemyuser u on ur.userguid = u.userguid( isdisabeld isdisabeld ) (13select userguid14from myuserroles ) f.application ,17 ur.userguid.application20) as temp2myapplication a on a.application = temp2.applicationa.application in (24select application25from myfunction, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,,,,,,,,,,,,,,,, ) application )temp2.usercount temp2.usercount ) > a.licenseusercount
表 'worktable'。扫描计数 1,逻辑读取 109 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'myuserroles'。扫描计数 1,逻辑读取 73 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'myuserrights'。扫描计数 2772576,逻辑读取 11812753 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'myfunction'。扫描计数 2,逻辑读取 90043 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'myuser'。扫描计数 1,逻辑读取 163 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'myapplication'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
表 'worktable'。扫描计数 1,逻辑读取 109 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'myuserroles'。扫描计数 1,逻辑读取 73 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'myuserrights'。扫描计数 2772576,逻辑读取 11812753 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'myfunction'。扫描计数 2,逻辑读取 90043 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'myuser'。扫描计数 1,逻辑读取 163 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'myapplication'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
sql server 执行时间:
cpu 时间 = 12625 毫秒,占用时间 = 12652 毫秒。
sql server 分析和编译时间: 
cpu 时间 = 0 毫秒,占用时间 = 0 毫秒。
sql server 执行时间:
cpu 时间 = 0 毫秒,占用时间 = 0 毫秒。
io上千万,该语句是对应的一个展示页面,统计count(*)是为了分页,执行时间为12s,开始拿到该语句,一头雾水,不知如何下手。
分析手段说说我的分析手段,这里无法把数据库给大家,所以只能是分享我的分析手段,能给大家启发就达到了本文的目的,一般拿到这种sql语句,我首先执行一遍
然后看执行计划,找最大的开销,看能不能加索引优化,看多了也没太大用,
最大的开销在索引查找上,其实我最讨厌的就是这种,一看最大开销是索引查找,也没办法加索引去优化,一般遇到这种情况,是因为选错了执行计划导致的,
选错了执行计划是代表了你写的sql有问题,有什么问题?sql语句中有or,not in这些不符合sarg的,我采取了一个比较有效的验证方式,强制改变连接
方式,很暴力,也很危险
(*).application , 3count(*) as usercount 4from( select f.application 5frommyuserrights urmyfunction f on ur.objecttype = f.functioncodemyuser u on ur.userguid = u.userguid( isdisabeld isdisabeld ) (13select userguid14from myuserroles ) f.application ,17 ur.userguid.application20) as temp221right hash join myapplication a on a.application = temp2.applicationa.application in (24select application25from myfunction, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,,,,,,,,,,,,,,,, ) application )temp2.usercount temp2.usercount ) > a.licenseusercount
其它类似信息

推荐信息