开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQLServer性能优化之改写SQL语句

简介:
+关注继续查看
性能优化之SQL语句改写
有这样一条SQL,在系统性能视图中显示执行时间30秒,单独拿出来执行时间6秒
SELECT *
  FROM TABLEA
 WHERE COND1 AND (A.FIELD2<>6 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)
        OR 
        A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...)                                  
       ) 
 ORDER BY 1
优化步骤
首先把COND1之前的语句拿出来执行约0秒  
其次分别执行每个单独的子查询(NOT IN中的子查询)语句也是0秒
再次把OR的语句分别执行,发现执行速度均是0秒
分析问题可能出现在两个子查询的合并上,干脆直接把SQL语句改写成两个独立的语句再进行UNION试试看,如下格式
SELECT * FROM
(
  SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2<>6 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)
  UNION
  SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...) 
)A
ORDER BY 1  

执行后0秒,OK!








本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/362064,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql常用sql语句(5)- as 设置别名
Mysql常用sql语句(5)- as 设置别名
83 0
Mysql常用sql语句(13)- having 过滤分组结果集
Mysql常用sql语句(13)- having 过滤分组结果集
66 0
MySQL系列专题(2)-MySQL的SQL语句和高级特性
MySQL系列专题(2)-MySQL的SQL语句和高级特性
91 0
MySQL关于SQL语句的一些题目
MySQL关于SQL语句的一些题目 1、用一条SQL语句查询出每门课都大于80的学生的姓名 (1)SELECT NAME FROM score GROUP BY NAME HAVING MIN(grade) > 80 (2)SELECT DISTINCT NAME FROM score WH.
1533 0
***mysql中查询今天、昨天、上个月sql语句
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天Select * FROM 表名 Where TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名)
1054 0
MySQL的一些常用的SQL语句整理
安装MySQL有两种的方式,一种是解压版本,但是需要配置环境变量,相对而言比较麻烦。所以我们一般采取第二种方式,那就是到MySQL的官网上下载安装版。这样就会省去很多麻烦,在这里我就不再详细的介绍具体的安装过程了,百度一下,Google,上面有手把手的教程。
868 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Sever迁移PG经验
立即下载
SQL Server 2017
立即下载
RDS SQL Server CPU高使用率性能优化
立即下载