在进行数据库查询优化时,除了索引和SQL语句优化,你还会考虑哪些方面?
读写分离
将读请求分发到从库,写请求分发到主库,减轻主库的压力。
实现方式,可以参考这篇文章:实现数据库读写分离有哪几种方式?
- 手动AOP + ThreadLocal实现
- 通用组件,例如 Apache ShardingSphere
QA:上述两种实现方式的比较?
QA:AOP的原理?
QA:ThreadLocal原理?
QA:Apache ShardingSphere的实现原理?
QA:主从同步如何实现?
分库分表
应对海量数据,分散存储和查询压力。
QA:如何做分库分表?
业务缓存
引用Redis等缓存,存储热点数据或者高频查询数据,缓解数据库压力。
QA:如何识别数据位热数据和冷数据?
QA:缓存数据淘汰机制?
批量操作
批量插入、删除、更新,减少网络IO和事务开销。
慢查询日志分析
定期分析MySQL慢日志,找出耗时SQL优化。
QA:如何进行慢SQL查找和分析优化?
数据参数调优
调整MySQL的innodb_buffer_pool_size、query_cache_size大小。
QA: 这两个参数是干什么的?
硬件优化
优化数据库服务器硬件资源:
- 升级SSD硬盘
- 增加内存
- 更高性能的CPU
特定业务场景优化
某一个数据库并不适用于所有的业务场景。根据特定场景选用非关系型数据库,例如MongoDB,ES等。