存储优化
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)