接口性能优化(数据库篇)
1.数据库层面
1.1.给需要频繁查询的数据新增索引
今天在进行报表查询操作时,我发现原先的 SQL 查询需要大约 3 秒的时间,这个速度在可接受的范围内。但是,当新需求需要增加更多的详细查询条件时,查询的表数据量增加了几倍,这导致了查询条件增加后 SQL 的查询时间扩大到了 13 秒。
为了解决这个问题,我首先进行了原始 SQL 的优化:
- 减少了非必要的函数调用,因为函数计算会增加查询的负担;
- 尽可能地使用
Join
查询代替子查询; - 为关键字段添加索引(这个操作直接提升了查询性能,具体来说,查询时间从 13 秒缩短到了 120 毫秒)。
这次添加索引明显地提升了查询性能,对于我的业务场景来说,效果非常明显。
添加索引的优缺点可以简单概括如下:
优点:
- 提高查询速度:索引极大地加快了数据检索速度,使得查询操作更高效。
- 加速表连接:对于JOIN操作,索引能显著提升处理速度。
- 优化排序和分组速度:索引支持快速排序和分组查询。
缺点:
- 降低更新速度:每当数据被添加、删除或修改时,索引也需要被更新,这会减慢数据的更新速度。
- 占用更多空间:索引需要额外的物理空间来存储。
- 增加维护成本:索引需要定期维护和重建,增加了数据库的维护负担。
1.2.数据库表设计优化
- 减少数据冗余存储
- 索引优化(索引会大幅增加查询效率,但会降低写操作效率)
- 避免使用数据库关键词作为列名表名(例如:oracle的
ROWID
,level
等等)
2.代码层面
2.1 减少数据库访问次数
在循环内进行数据库操作是一个常见的性能瓶颈产生地。应尽可能的减少数据库操作的次数,对于需要执行的多条查询语句,可以使用批处理(例如MybaitsPlus的saveBatch
方法)的方式一次性执行,减少网络开销和数据库压力。另外,如果有大量重复的数据库查询,应考虑使用查询结果缓存来避免重复访问。
2.2 实施懒加载
对那些无需立即加载的数据,我们可以运用懒加载(lazy loading)的策略。在使用Spring Framework时,可以利用@Lazy注解实现此目的。只有在真正需要数据时,才进行数据库查询和数据加载,这样可以有效节约资源,提升系统的响应速度。
2.3 利用缓存技术
对于访问频繁且变动少的数据如配置信息、用户登录信息等,我们可以采用缓存技术进行优化。例如,可以使用Redis作为缓存中间件,将常用数据存储在内存中,进而大幅提升访问速度并降低数据库的访问压力。