码迷,mamicode.com
首页 > 数据库 > 详细

SQL 逻辑优化 case when 转为 union all

时间:2018-04-21 13:32:53      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:HERE   select   访问量   结果   隔离级别   sel   级别   大小   cat   

通常数据库的优化从硬件层面去考虑可分为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

标签:HERE   select   访问量   结果   隔离级别   sel   级别   大小   cat   

原文地址:https://www.cnblogs.com/vansky/p/8900628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!