一次SQL优化
最近在大数据平写 Hive SQL 跑离线作业,数据量大概在三千万,有一个离线任务每次执行都要两个小时以上,我感觉太慢了。为什么觉得慢?刨除实现 SQL 逻辑的时间,自测、冒烟测试、上线每次执行一次需要 2h,也就是修改一处 SQL 要经历 6 小时才能看到最终结果。根据我的经验判断不应该耗费这么长时间,于是想着看看能不能改善一下。我先让数据平台的同学帮忙看,由于他们忙没得到结果,于是自己动手优化了一下,优化后的结果还是比较让我吃惊的,因为我并没有使用很复杂高深的手段(主要是减少临时表、减少嵌套查询数),却得到了意向不到的效果。这使我产生许多想法和思考。
优化后的效果:时间减少 95%,内存减少 80%。
- 优化前:耗时 2h,内存占用 80G
- 优化后:耗时 6min,内存占用 16G
总结
-
这次SQL优化并不复杂却带来了可观的性能收益,说明简单的理论基础和参数调整也能达到不错的性能,仅仅一点点变化性能就可能差一个数量级;
-
熟悉理论基础和计算机原理,是写出高效的程序必要条件;