SQL 逻辑优化 case when 转为 union all

Posted vansky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 逻辑优化 case when 转为 union all相关的知识,希望对你有一定的参考价值。

通常数据库的优化从硬件层面去考虑可分为4个方面:

CPU:即降低计算复杂度,如减少sql各类聚合函数,窗口函数,case when等。

IO :(较少查询结果集过程中对数据的访问量。数据优化很大程度从这里入手

网络 : 较少查询结果集的大小,去除不必要的查询字段

数据库资源  : 这里讲的数据库资源主要是数据的一些参数设置,如索引、数据缓存。锁的争用,死锁,锁等。 锁问题大部分从业务逻辑上去优化。如拆分事务,降低事务复杂度及事务中的表关联。做到少量多次提交。即让事务尽快完成,释放资源。另一方面,根据业务情况,使用满足需求的低隔离级别的读锁。在业务中对库表的操作尽量使用相同顺序。如相近业务中事务先查询T1表再查询T2表。(mysql中尽量避免使用 replace into .. ,insert into ... on dumplicate ...。并发时容易出现死锁)

举例:

SQL逻辑改写,减少cpu及io的使用:

case when 某些情况转为 union all

简写

SELECT * FROM (
....
(CASE WHEN a.updatetime>b.updatetime THEN a.updatetime ELSE b.updatetime END) as updatetime,

FROM a
LEFT JOIN b on b.ClientID = a.ClientID
) t
WHERE t.updatetime>=‘xxxxx‘

改写:

SELECT ....
a.updatetime AS updatetime ,
FROM a

LEFT JOIN b on b.ClientID = a.ClientID

WHERE a.updatetime>=‘xxxx‘ AND a.updatetime>b.UpdateTime
UNION ALL
SELECT ....
b.UpdateTime as updatetime ,
FROM a
LEFT JOIN b on b.ClientID = a.ClientID
WHERE b.UpdateTime>=‘xxxx‘ AND a.updatetime<=b.UpdateTime

 














以上是关于SQL 逻辑优化 case when 转为 union all的主要内容,如果未能解决你的问题,请参考以下文章

WebSQL 查询优化帮助 - CASE WHEN 使查询慢 400 毫秒

MySQL巧用sum,case...when...优化统计查询

case when 用法

y下面SQL语句如何使用CASE WHEN 将以下两句合并为一句。谢谢! 当

sql 中 case when 语法

case when用法sql