SQL调优
SQL 调优往往是解决数据库问题的第一步,往往投入少部分精力就能获得较大的收益。
SQL 调优主要目的是尽可能的让那些慢 SQL 变快,手段其实也很简单就是让 SQL 执行尽量命中索引。
开启慢 SQL 记录
需要在 Mysql 配置文件中配置几个参数即可
slow_query_log=on
long_query_time=1
slow_query_log_file=/path/to/log
调优的工具
使用 explain 这个命令来查看 SQL 语句的执行计划,通过观察执行结果很容易就知道该 SQL 语句是不是全表扫描、有没有命中索引。
返回列意义:
select_type:
- SIMPLE 简单查询
- UNION联合查询
- SUBQUERY 子查询
type:
const:只有一条查询结果 & 主键/唯一索引
eq_ref:联合查询 &主键/唯一索引&只有一条查询结果
ref:非唯一索引
range:使用索引进行范围查询时
index:查询的字段是索引一部分,覆盖索引; 使用主键排序
all:全表扫描
ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL 代表这条 SQL 语句全表扫描了,需要优化。一般来说需要达到range 级别及以上。
possible_keys:可选择的索引
key:实际使用的索引
rows:扫描的行数
索引优化
例如索引减少数据库扫描的行数,
例如覆盖索引,联合索引,前缀索引等。
优化数据访问
减少请求的数据量,只查询必要的列,例如
- 将 * 替换为要查询的列;
- 只返回必要的行,使用limit限制返回行数;
- 缓存重复查询的数据,例如使用redis缓存用户登录数据。
重构查询方式
数据量大的表,做分页,分批查询。
网友评论