1、索引语法
2、慢查询日志
慢查询日志记录了所有执行时间超过指定参数( long_query_time ,单位:秒,默认 10 秒)的所有
SQL 语句的日志。
MySQL 的慢查询日志默认没有开启,我们可以查看一下系统变量 slow_query_log 。
开启慢查询日志,需要在 MySQL 的配置文件( /etc/my.cnf )中配置如下信息:
![](https://img-blog.csdnimg.cn/direct/8f7ac92763e74924b5c4e8f157b09e66.png)
检查慢查询日志 :
最终我们发现,在慢查询日志中,只会记录执行时间超多我们预设时间( 2s )的 SQL ,执行较快的 SQL是不会记录的。
![](https://img-blog.csdnimg.cn/direct/3f30955cef7b4a9e81c92384a11db02e.png)
3、profile 和explain
profile 能够在做SQL 优化时帮助我们了解时间都耗费到哪里去了
通过 have_profiling参数,能够看到当前 MySQL 是否支持 profile 操作:
1、SELECT @@have_profiling ;
2、SET profiling = 1; 开启 profiling
3、执行sql语句
4、
![](https://img-blog.csdnimg.cn/direct/a887fa56c0f04b0aa9a86058c94e9f58.png)
EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行
过程中表如何连接和连接的顺序。
![](https://img-blog.csdnimg.cn/direct/8895ffdc3b7c43cf8c5ba585fba52a53.png)
![](https://img-blog.csdnimg.cn/direct/8838a99b2ea645dca9385759461cc63b.png)
![](https://img-blog.csdnimg.cn/direct/4de33546b4b342f3b361fb4866fa1659.png)
4、索引设计原则
1). 针对于数据量较大,且查询比较频繁的表建立索引。
2). 针对于常作为查询条件( where )、排序( order by )、分组( group by )操作的字段建立索
引。
3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
4). 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
5). 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
6). 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
7). 如果索引列不能存储 NULL 值,请在创建表时使用 NOT NULL 约束它。当优化器知道每列是否包含 NULL 值时,它可以更好地确定哪个索引最有效地用于查询。