加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer性能优化之改写SQL语句

发布时间:2020-12-12 15:16:25 所属栏目:MsSql教程 来源:网络整理
导读:性能优化之SQL语句改写 有这样一条SQL,在系统性能视图中显示执行时间30秒,单独拿出来执行时间6秒 SELECT * ? FROM TABLEA ?WHERE COND1 AND (A.FIELD26 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...) ??????? OR ??????? A.

性能优化之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,'') 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!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读