标签搜索
侧边栏壁纸
  • 累计撰写 18 篇文章
  • 累计收到 10 条评论

SQL优化技巧

Arlen
2025-01-06 / 0 评论 / 26 阅读 / 正在检测是否收录...

存储优化

1. 行/列存储

顾名思义,行存储就是数据的存储按照标准的一行一行的对数据进行存储,而列存储则是一列的数据是连续的存储在一起,这一列存完之后再进行下一列的存储,这样有个好处是当仅需查询某几列的时候能快速读取这几列的数据,减少数据的检索和读取。

行存储:由于每行数据都存储在一起,追加数据比较简单,相对来说效率较好;另外如果使用select *的场景比较多,列存储没有什么优势,可以使用行存储。

列存储:具有良好的读取性能,能够快速读取需要的列,更适合大数据集的数据查询,比如数据仓库的表一般来说不需要查询全部字段,故绝大部分表都是使用的列存储。另外列存储支持更好的压缩比,能够更好的节省空间。

2. 表分区

表分区在大数据中是一个非常重要的优化手段,以Hive表为例,每一个分区在存储上都是一个独立的目录,当SQL中,如果使用分区限制条件能快速的定位到这个数据目录,然后进行数据的读取,可以极大的提升查询效率。另外Hive表也需要使用分区目录进行整个目录的覆盖,所以如果表设计成需要能重刷的能力,最好建成分区表以便支持重刷。

SQL案例:

1,尽早的过滤数据

说明:尽早的过滤数据可以减少网络IO,也可以减少不必要的计算,比如尽早加上分区条件,where dt='日期'

×:select * from test.test_city_base_info where create_time >='2024-06-11 12:00:00' and create_time<='2024-06-11 13:00:00'

√:select * from test.test_city_base_info where dt='2024-06-11' and create_time>='2024-06-11 12:00:00' and create_time<='2024-06-11 13:00:00'

2,只查询需要的字段,避免使用Select * 写法

说明:数仓表大多数时候都使用列式存储, 查询字段能很快的查到对应的列,并且也可以减少数据量,减少网络IO。

×:select * from test.test_city_base_info

√:select city_id,province_id from test.test_city_base_info

0

评论 (0)

取消