SQLServer性能优化之改写SQL语句
2010-07-28 17:03
337 查看
性能优化之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!
有这样一条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!
相关文章推荐
- SQLServer性能优化之改写SQL语句
- SQLServer性能优化之SQL语句性能测试
- 改写SQL语句优化MySQL性能
- SqlServer和Oracle中一些常用的sql语句9 SQL优化
- 优化临时表使用,SQL语句性能提升100倍
- 常用性能优化方面的SQL语句
- 数据库性能调优——sql语句优化
- 优化临时表使用,SQL语句性能提升100倍
- 数据库性能优化之SQL语句优化
- 优化临时表使用,SQL语句性能提升100倍
- SQLServer 2005新功能,一些性能方面问题,sql 经典语句(转载)
- Oracle性能优化之SQL语句
- sql一些语句性能及开销优化
- 数据库性能优化之SQL语句优化
- mysql性能优化学习笔记(3)常见sql语句优化
- 数据库性能优化之SQL语句优化1
- 性能优化之查看bad sql语句
- SQL语句性能优化(续)
- Oracle之SQL语句性能优化(34条优化方法)
- SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句