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

本文介绍了MySQL中索引的基本创建方法及优化技巧,包括如何创建索引、查看索引状态以及利用索引提高查询效率等关键内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 基础操作

    -- 准备工作

-- 创建一个测试表
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; -- 定位分析查询语句的执行计划

 

 注意:这里的结果集

  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;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值