MYSQL-基础操作-索引与查询执行计划

一 基础操作

    -- 准备工作

-- 创建一个测试表
create table tb2(
id int UNSIGNED not null PRIMARY key  auto_increment,
  name VARCHAR(30)
);
desc tb2; -- 查看表结构

    -- 索引基本操作

create index in_name on tb2(name);-- 创建索引
show index from tb2; -- 查看索引
drop index in_name on tb2; -- 删除操作

另外一种创建方法:

alter table company add index in_age(age); --新增索引

alter table company drop index in_age;--删除索引

二 索引优化解析

  -- 基础数据准备

insert into tb2(name) values("user1");
insert into tb2(name) values("user1");
insert into tb2(name) values("user1");
insert into tb2(name) values("user2");
insert into tb2(name) values("user3");
insert into tb2(name) values("user4");
insert into tb2(name) values("user4");

  --  desc + 查询语句定位

  select * from tb2;

  desc select * from tb2; -- 定位分析查询语句的执行计划

 

 注意:这里的结果集

扫描二维码关注公众号,回复: 2427395 查看本文章
  1. rows:查询影响行数!
  2. select_type:查询类型,单表查询还是多表查询
                           simple--简单表
                           primary--主查询即外层查询
                           union union中的第二个或者后面的查询语句
                           subquery --子查询中的第一个select 
  3. table 输出结果集的表
  4. type:表示表的链接类型 性能由好到差
                          sysem--表仅一行
                          const--只一行匹配
                          eq_ref对于前面的每一行使用主键和唯一
                          ref--同eq_ref但是没有使用主键和唯一
                          ref_or_null--同前面对null查询
                          index_merge--索引合并优化
          unique_subquery--主键子查询
                  index_subquery--非主键子查询
                          range--表单中的范围查询
                          index--都通过查询索引来得到数据
                          all--全表扫描
  5. possible_keys 表查询过程中可能使用的索引
  6. key 表示实际使用的索引
  7. key_len 索引长度
  8. extra 执行情况的说明和描述
  9.  ref null

   --举个栗子                     

还是使用上面的表

desc select * from tb2 where name="user1";

结果:


这里最明显的是rows,影响行数为7行。

下面对name加索引:

create index in_name on tb2(name);-- 创建索引
show index from tb2; -- 查看索引

然后再执行 查询计划:

desc select * from tb2 where name="user1";

得到的结果:

这里最明显的是rows,影响行数为3行。

比较一下前后两个查询结果,rows变化最明显。试想如果有10位数的查询结果,不加索引的影响行数和加了索引的影响行数天差地别。效率自然而升!

另外这种方式主要针对mysql的engine为MyISAM的情况。

修改engine:alter table company engine=myisam;

查看engine:show create table company;




猜你喜欢

转载自blog.csdn.net/panda_in5/article/details/78929511
今日推荐