文章目录
提示:本文非原创。记录此文的目的:再学习和梳理sql 优化知识点,方便以后遇到类似问题方便查阅以及快速处理。
一、数据倾斜分类
根据使用经验总结,引起数据倾斜的主要原因有如下几类:
-
Join
-
GroupBy
-
Count(Distinct)
-
ROW_NUMBER(TopN)
-
动态分区
其中出现的频率排序为JOIN > GroupBy > Count(Distinct) > ROW_NUMBER > 动态分区。
二、Join倾斜
1.大表Join小表
使用MAPJOIN HINT语法,如下所示。
sql
SELECT /*+ mapjoin(t2,t3)*/
t1.ip
,t1.is_anon
,t1.user_id
,t1.user_agent
,t1.referer
,t2.ssl_ciphers
,t3.shop_province_name
,t3.shop_city_name
FROM <viewtable> t1
LEFT OUTER JOIN (<other_viewtable>) t2
ON t1.header_eagleeye_traceid = t2.eagleeye_traceid
LEFT OUTER JOIN ( SELECT shop_id
,city_name AS shop_city_name
,province_name AS shop_province_name
FROM <tenanttable>
WHERE ds = MAX_PT('<tenanttable>')
AND is_valid = 1
) t3
ON t1.shopid = t3.shop_id