zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python input函数
    linux可用内存判断
    python if-elif-else 判断
    python if判断
    python使用range()函数创建数字列表list
    python range函数
    python语法缩进
    python for循环
    python列表删除和排序
    hbctf 父亲的信
  • 原文地址:https://www.cnblogs.com/vansky/p/8900628.html
Copyright © 2011-2022 走看看