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