在大数据量场景下,数据的入库性能成为了重中之重,记录下数据库性能优化的点
1 索引层面
索引是为了方便查询的,但是索引的建立需要额外的性能开销。在测试中发现,500w数据场景下,建立一个单列索引需要3min左右。如果还有其他索引
可能带来的影响更大。索引的建立必须是在业务场景下使用频繁,能够带来较大的查询收益的。
(1)首先需要整理业务中的查询逻辑,各场景下的查询条件,得到最为频繁的查询条件。
(2)针对查询条件建立索引,索引最好能够复用。且满足常见索引的建立原则。
(3)去除没有使用的索引
(4)若有大数据量的更新,先去除索引,然后再重建索引,update时候,会去更新索引,带来开销
(5)在数据发现的时候,若首次发现数据量非常大,尽量保证数据先插入完成,然后再建立索引
(6)在查询的时候,若有联合索引需要保证最佳左前,查看业务中哪些查询逻辑可优化
2 sql书写层面
(1)通过执行计划去观察执行的效率
(2)查询时候,尽量保证查询能够走索引
(3)更新的时候,在pg数据库中,update耗时还是比较大的,300w数据的update某一列,需要1min。
update set 和upsert语句的性能相差20%左右。但是具体还需要结合业务场景。
(4)select 的时候,只选择关心的数据,不要查所有
3 对于批量的数据新增
(1)在pgsql中,采用copy语句相对于insert的批量插入来说性能提高200%
(2)update的时候只更新需要的列
4 表层面
(1)分析表之间的关系,对于大表,是否考虑拆分,对于只有少数有用信息时候,表之间的内容是否能够合并
(2)通过数据库的中间件,来完成分表和分库的功能(得结合业务场景)