美文网首页Mysql学习
索引,慢查询,优化实践

索引,慢查询,优化实践

作者: Sandy_678f | 来源:发表于2019-12-12 15:12 被阅读0次
  1. 建表:
    create table user (
    id int auto_increment primary key,
    name varchar(20) not null,
    sex varchar(5) not null,
    class int not null,
    score int
    )engine=innodb;

  2. 插入数据


    image.png
  3. 创建的索引

##添加主键索引
alter table user add primary key (id);

##添加唯一索引
alter table user add unique (name);

##添加组合索引
alter table user add index uk_name_class_score (name,class,score);
  1. 查看创建的索引
show keys from user;
image.png
  1. 部分SQL语句分析
##1. 未命中任何索引,全表扫描,server层使用where条件过滤(using where)
explain select name, score, sex from user where sex = 'F';

##2. 命中联合索引,覆盖索引,无需回表(using index),server层使用where条件过滤(using where)
explain select name, score from user where name = 'Sandy';

##3. 命中组合索引,非覆盖索引,需要回表,using index where(5.6+新特性),存储引擎使用where条件过滤
explain select name, class, score, sex from user where name = 'Sandy';

##4. 命中索引,索引表全表扫描
explain select name, class, score from user where score > 95;

##5. 未命中索引,全表扫描
explain select name, class, score, sex from user where score > 95;
  1. 关于group by,order by的优化
    一条简单的sql语句,使用了临时表与文件排序
select class, avg(score) from user group by class;

explain select class, avg(score) from user group by class;

优化前:


image.png

优化方案 : 添加新的索引

alter table user add index uk_class_score (class,score);

或者

alter table user add index uk_class (class);

优化后:


image.png

相关文章

网友评论

    本文标题:索引,慢查询,优化实践

    本文链接:https://www.haomeiwen.com/subject/ehozgctx.html