大表优化
大表通常是指表数据达到一定程度,使增删查改的性能严重下滑的情况。优化思路:先从索引和sql优化入手,辅以加缓存、读写分离。接着再考虑进行分库分表,分库分表作为靠后的手段进行考虑。最后才是硬件优化。
1.索引优化
1.1 常用于查询条件的
1.2 优先选用唯一索引
1.3 使用短字段作为索引字段
1.4 字符字段尽量不做主键
1.5 尽量不用外键,程序保证
2.慢sql优化
2.1.查看执行计划 explain
2.2.如果有告警信息,查看告警信息 show warnings;
2.3.查看SQL涉及的表结构和索引信息
2.4.根据执行计划,思考可能的优化点
2.5.按照可能的优化点执行表结构变更、增加索引、SQL改写等操作
2.6.查看优化后的执行时间和执行计划
2.7.如果优化效果不明显,重复第四步操作
3.增加缓存
3.1浏览器或客户端
3.2应用层(redis)
3.3数据库访问层 sql语句缓存,查询记录缓存
4.分库分表
4.1水平拆分
保持数据表结构不变,按照分片策略存储数据。比如:订单表按照时间拆分为多个订单表,避免单一表数据过大。
优点:可以支持超大的数据量,代码逻辑改动小;
缺点:带来分片事务,跨节点join,逻辑复杂等问题。
4.2垂直拆分
根据表字段的相关性对数据表进行拆分。
优点:使字段数变少,简化表结构。
缺点:拆表后带来更多joini操作,增加事务复杂度。