🐂哥123 level
获赞
7
粉丝
2
关注
13
看过 TA
7
门头沟学院
2022
大数据开发工程师
IP属地:广东
暂未填写个人简介
私信
关注
1、尽量避免使用子查询例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name = chackca);其子查询在Mysql5.5版本里,内部执行计划是这样:先查外表再匹配内表,而不是先查内表t2,当外表的数据很大时,查询速度会非常慢。在MariaDB10/Mysql5.6版本里,采用join关联方式对其进行了优化,这条SQL语句会自动转换为:SELECT t1.* FROM t1 JOIN t2 on t1.id = t2.id但请注意的是:优化只针对SELECT有效,对UPDATE/DELETE子查询无效,固生产环境应避免使用子查询由于MySQL的优化器对于子查询的处理能力比较弱,所以不建议使用子查询,可以改写成Inner Join,之所以 join 连接效率更高,是因为 MySQL不需要在内存中创建临时表2、用IN来替换OR低效查询SELECT * FROM t WHERE id = 10 OR id = 20 OR id = 30;高效查询SELECT * FROM t WHERE id IN (10,20,30);另外,MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from table_name where num in(1,2,3)对于连续的数值,能用 between 就不要用 in 了;再或者使用连接来替换。#14天打卡计划#链接:https://www.zhihu.com/question/585735280/answer/2907290942来源:知乎
2023-02-24
在牛客打卡3天,今天也很努力鸭!
0 点赞 评论 收藏
分享
#hive#数据倾斜都有哪些原因?分别从spark、hive的角度分析。1、spark中的数据倾斜:包括spark streaming和sparkSQL。主要表现为:1)executor lost,OOM.shuffle 过程出错;2)Driver OOM;3)单个executor执行时间特别久,整个仍然任务卡在某个阶段不能结束;4)正常运行的任务突然失败。2、hive中常见的数据倾斜:1)key分布不均衡2)业务问题后者业务数据本身的问题,某些数据比较集中3)建表的时候考虑不周4)某些sql语句本身就有数据倾斜,例如:(1)大表join小表:其实小表的key集中,分发到某一个或者几个reduce上的数据远远高于平均值(2)大表join大表:空值或无意义值:如果缺失的项很多,在做join时这些空值就会非常集中,拖累进度。(3)group by: group by的时候维度过小,某值的数量过多,处理某值的reduce非常耗时间。(4)Count distinct:某特殊值过多,处理此特殊值的reduce耗时。3、解决思路:1)业务逻辑方面:  从业务逻辑层面来优化数据倾斜(比如两个城市突然做推广活动,导致两个城市的数据猛烈增长100000%,其余的城市的数据量不变的情况下,然后对不同的城市做group的数据统计,这时久会产生数据倾斜。如果我们这时对两个城市单独做count,可能用到两次MR,第一次是打散计算,第二次则是聚合,完成之后再和其他城市做最后的整合)2)程序方面:可以先group by, 再在外面套一层count3)调参4)从业务和数据上解决数据倾斜#大数据##spark#
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务