SQL之代码优化

1,分区表使用时必须+上条件过滤:

  1)全量表,day取最新分区,dt='2019-11-06'

  2)拉链表-每日增量表,进行现订日期,入dt BETWEEN '2019-10-01' AND '2019-10-31'

2,多数据去重的时候,使用group by 代替count distinct :

  如:计算订单个数的时候,原来使用count(distinct order)

  SELECT

      COUNT(order_id)

  FROM (

      SELECT order 

      FROM table

      WHERE dt='2019-11-06' AND condition2 AND condition3

      GROUP BY order

      ) a

3,子查询时减少*的使用:

  如:SELECT * FROM  ;正确方式:SELECT uid,trade_no,payer_member_id  FROM ;需要什么字段搜索什么字段

4,慎用IN 和NOT IN,连续值过滤时用 BETWWEN AND 代替,特定非连续值时忽略;

  如: age IN (1,2,3,4)  写成  age BETWEEN 1 AND 4

5,多表关联,先进行子查询后再进行关联; 

SELECT
    user_id,
    COUNT(t1.cargo_id) AS cargo_id,
    COUNT(t2.order_id) AS order_id
FROM(
    SELECT
        user_id,
        cargo_id
    FROM ods.cargo_daily_event
    WHERE dt='2019-11-06'
    ) t1
  INNER JOIN
  (
    SELECT
        cargo_id,
        order_id
    FROM ods.order_daily_event
    WHERE dt='2019-11-06'
  )t2
ON t1.cargo_id=t2.cargo_id
GROUP BY user_id   

6,表关联时加上ON条件,避免笛卡尔积;

7,表关联时一定要在子查询里过滤掉NULL值,避免数据倾斜;

8,不要对一个表进行重复处理,多使用临时表,尽量做到一次处理多次使用;

猜你喜欢

转载自www.cnblogs.com/CrazyJioJio/p/11815411.html