mysql-调优笔记

什么是慢查询

慢查询日志,顾名思义,就是查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。

慢查询配置

show VARIABLES like 'slow_query_log';
set GLOBAL slow_query_log=1;//开启1,关闭0

Explain执行计划

*一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,通过使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。
*在SQL查询的前面加上EXPLAIN关键字就行。比如:EXPLAIN select * from table1

执行计划详解

*id:在一个大的查询语句中每个SELECT****关键字都对应一个唯一的id
*select_type: SELECT****关键字对应的那个查询的类型
*table:表名
*partitions:匹配的分区信息
*type:针对单表的访问方法
*possible_keys:可能用到的索引
*key:实际上使用的索引
*key_len:实际使用到的索引长度
*ref:当使用索引列等值查询时,与索引列进行等值匹配的对象信息
*rows:预估的需要读取的记录条数
*filtered:某个表经过搜索条件过滤后剩余记录条数的百分比
*Extra:—些额外的信息

查询优化器

VV`M91[1U6G`2YU%`EKUJ`Q.png

高性能的索引使用策略

根据system>const>eq_ref>ref>range>index>ALL 的原则

*不在索引列上做任何操作
*尽量全值匹配
*最佳左前缀法则
*范围条件放最后
*覆盖索引尽量用
*不等于要慎用 || mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
*null/not null对索引的可能影响
*like以通配符开头('%abc...'),mysql索引失效会变成全表扫描的操作
*字符类型加引号
*使用or关键字时要注意
*使用索引扫描来做排序和分组
*ASC、DESC别混用
*尽可能按主键顺序插入行

你可能感兴趣的:(mysql-调优笔记)