• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQL优化之not in

mysql 搞代码 4年前 (2022-01-09) 21次浏览 已收录 0个评论

阅读目录 一直从事运维的工作,免不了优化一些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

表 ‘Workt本文来源gaodai$ma#com搞$$代**码网$able’。扫描计数 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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SQL优化之not in

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址