Mysql优化可分为三部分:索引的优化、SQL语句优化、表的优化
索引优化可以遵循以下几个原则:
- 联合索引最左前缀匹配原则
- 尽量把字段长度小的列放在联合索引的最左侧(字段越小,一页存储的数据量越大,IO性能就越好)
- order by 有多个列排序的,应该建立联合索引
- 对于频繁的查询优先考虑使用覆盖索引
- 前导模糊查询不会使用索引,比如:like %aaa%
- 负向条件不会使用索引,如 !=,<>,not like,not in,not exists
- 对于where子句中经常使用的列,最好设置索引
SQL语句优化,可以通过explain查看SQL的执行计划,优化语句原则:
- 在where和order by涉及的列上建立合适的索引,避免全表扫描
- 任何查询都不要使用select *,而是用具体的字段代替
- 多表连接时,尽量小表驱动大表,即小表join大表
- 用exists代替in
- 尽量避免在where子句中对字段进行函数操作
数据库表优化:
- 表字段尽可能用not null
- 字段长度固定表查询会更快
- 将数据库大表按照时间或者一些标志拆分成小表
- 水平拆分:将记录散列到不同的表中,每次从分表查询
- 垂直拆分:将表中的大字段单独拆分到另一张表,形成一对一的关系