天津做网站软件,网站内容编辑器,怎么判断网站的好坏,网站建设智推网1、概念 使用EXPLAIN关键字可以模拟优化器执行SQL语句#xff0c;分析你的查询语句或是结构的性能瓶颈
2、使用 在 select 语句之前增加 explain 关键字 #xff0c;MySQL 会在查询上设置一个标记#xff0c;执行查询会返回执行计划的信息#xff0c;而不是执行这条SQL 在…1、概念 使用EXPLAIN关键字可以模拟优化器执行SQL语句分析你的查询语句或是结构的性能瓶颈
2、使用 在 select 语句之前增加 explain 关键字 MySQL 会在查询上设置一个标记执行查询会返回执行计划的信息而不是执行这条SQL 在explain 语句后马上执行一条show warnings语句会展示mysql对上面这条sql优化后的 语句通过这个我们可以大概了解mysql给我们sql语句做的一些优化但是不一定能执行
3、explain中列的含义 1id id是select的编号值越大执行优先级越高如果相同则从上往下执行null最后执行 2select_type simple 简单查询 primary 复杂查询中最外层的select subquery 包含在select 中的子查询不在from之后 derived 包含在from后面的子查询mysql会将结果放在一个临时表派生表 3table 查询的表名称 4partitions 如果查询是基于分区表的话会展示查询将要访问的分区 5type 访问的类型 1、NULL:比如select min(id) from table; 就是null意思就是在优化阶段已经查询出来结果不需要去真正执行所以比 select id from table order by id limit 1 快 2、system 是const的一个特例衍生表中匹配的数据只有一条 3、const mysql会将查询的条件优化为一个常量用于primary key 或unique key的所在列与常数比较 表中只有一个匹配行读取一次 4、eq_ref primary key 或 unique key 索引的所有部分被连接使用最多只返回一条符合条件的记录 5、ref 相比eq_ref ,不使用唯一索引不止于关联查询 6、range 使用索引但是条件是一个范围 7、index 使用全索引查询一般覆盖索引 8、all 全表扫描 6possible_keys 可能用到的索引 7key 实际用到的索引 8key_len 用到索引里使用的字节数 key_len计算规则如下 字符串char(n)和varchar(n)5.0.3以后版本中n均代表字符数而不是字节数如果是utf-8一个数字 或字母占1个字节一个汉字占3个字节 char(n)如果存汉字长度就是 3n 字节 varchar(n)如果存汉字则长度是 3n 2 字节加的2字节用来存储字符串长度因为 varchar是变长字符串 数值类型 tinyint1字节 smallint2字节 int4字节 bigint8字节 时间类型 date3字节 timestamp4字节 datetime8字节 如果字段允许为 NULL需要1字节记录是否为 NULL 索引最大长度是768字节当字符串过长时mysql会做一个类似左前缀索引的处理将前半部分的字符提取出来做索 引。 9ref key列记录的索引中表查询值所用到到列或者常量 10rows 预估读取的行数不是结果集中的行数 11filtered 该列是一个百分比的值rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数前一个表指 explain 中的id值比当前表id值小的表。 12Extra Using index 使用了覆盖索引 Using where 使用了where语句处理结果 Using index condition where 条件中使用了索引但是不是覆盖索引 Using temporary 使用了临时表 Using filesort 使用了外部排序有可能是文件排序如果数据量比较大可能会磁盘排序 Select tables optimized away 使用某些聚合函数比如 max min
索引注意事项 1、遵循最左前缀原则 2、不要对索引列做函数操作 3、尽量覆盖索引 4、!、 、 not in、 not exists、is null、 is not null 可能无法使用索引导致全表扫表 5、比较类型要匹配防止隐式转换 6、or 或 in 不一定走索引 7、区分度低的字段不一定走索引 8、范围查询放后面有时候可以优化为等值查询 9、like可以用覆盖索引优化