mysql数据库优化
自上而下,最小成本实现最大的收益。
盗图:
1、从业务入手进行调优
①、部分冗余减少表关联
②、根据业务设计表,覆盖索引减少回表操作等
2、SQL优化,索引优化
通过explain命令,查看执行计划执
①、type:表示表的连接类型
阿里开发手册禁止type小于range,也就是最低标准是范围查找。
查看是否存在索引没有用到,是否可以增加索引,是否出现了如条件中有函数,出现因式转换等。
②、Extra:执行情况的描述和说明
Using index:覆盖索引,不用回表操作
Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤。
Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by。
Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”。
Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
Impossible where:这个值强调了where语句会导致没有符合条件的行(通过收集统计信息不可能存在结果)。
Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行
No tables used:Query语句中使用from dual 或不含任何from子句
3、分库分表
单表过大,内存压力,横向分表。
数据库连接数过大,导致性能异常,纵向分库(根据业务模块划分)。读写分离,一主多从。
内存压力,链接压力,这种需要分库,shardingjdbc数据库访问中间件。
4、数据库配置
①、最大可连接数
②、线程池数量
③、缓存大小
5、服务器配置调优
增加内存
6、硬件调优
CPU,内存