作者:杨冠宝/高海慧
来自:码出高效 Java 开发手册
数据库作为服务器端最为最为昂贵的资源之一,如果使用不当常常会导致系统卡顿或系统崩溃,那如何来优化数据库呢?下面来看阿里巴巴《Java开发手册》给出的优化方案。
1
建立高效且合适的索引
索引谁都可以建,但想要建好又难度极大。因为索引既要有数据特征,又有业务特征,数据量的变化会影响索引的选择,业务特点不一样,索引的优化思路也不一样。通常某个字段平时不用,但是某种场景下命中“索引缺失”的字段会导致查询瞬间变慢。所以要事先明确业务场景,建立合适的索引。
2
排查连接资源为显示关闭的情形
要特别注意在 ThreadLocal 或流式计算中使用数据库连接的地方。
3
合并短的请求
根据 CPU 空间局部性原理,对于相近的数据,CPU 会一起提取到内存中。另外,合并请求也可以有效减少连接的次数。
4
合理拆分多个表join的SQL
若是超过三个表则禁止 join,如果表结构建的不合理,应用逻辑处理不当,业务模型抽象有问题,name 三标 join 的数据量由于笛卡尔积操作会呈现几何倍数的增加,所以不推荐这样的做法。另外,对于需要 join 的字段,数据类型应保持绝对一致。多表关联查询时,应确保被关联的字段要有索引。
5
使用临时表
某种情况下该方法是一种比较好的选择。曾经遇到一个场景不适用临时表需要执行 1 个多小时,使用临时表降低到 2 分钟以内。因为在不断的嵌套查询中,已经无法很好地利用现有的索引提升查询效率,所以把中间结果保存到临时表,然后重建索引,再通过临时表进行后续的数据操作。
6
应用层优化
包括进行数据结构优化、并发多线程改造等。
7
改用其他数据库
因为不同数据库针对的业务场景是不同的,比如 Cassandra、MongoDB。
【END】
关注下方二维码,订阅更多精彩内容