1. 配置参数
- 索引缓冲区长度key_buffer_size,推荐设置为可用内存的25%,目的是缓冲更多的索引
- 表缓冲长度 read_buffer_size,目的缓冲最常用的表
- 慢查询日志时间阈值 long_query_time,可以获取查询的时间瓶颈
2. 添加索引
- 为user表的username字段添加索引
CREATE INDEX idx_username ON user(username)
3. explain
- explain 放在select之前用于解释语句的执行过程,我们可以用它来分析当前语句的优化效果
重要的三个输出行:
- type: 联接的类型
- const:最优,使用primary key或者unique key检索,最终只得到一条数据
- ref: 较好,在多个表联接,只使用最左边的前缀,也就是第一个表的非primary和unique字段时使用。
- range:使用一个索引来检索一个范围内的行
- all: 对多个表的联接进行完全的扫描,最差
- keys:使用的索引
- extra:查询的详细信息
- range checked for each record: 没有找到合适的索引
- using filesort: 使用了排序,一般这种情况需要为排序的列添加index
- using temporary: 使用了临时表容纳结果
4. profiler
- 用于监测sql语句的性能瓶颈
set profiling = 1
show profiles //显示所有查询,其中QUERY_ID可以用于下一条语句
show profile [] for QUERY [] //查看某条查询CPU,IO等消耗
5. 查询大表
- 核心思想就是避免全表扫描