理解 索引的使用

一、索引介绍

索引,其实就是关键字和所在位置的一个映射关系
作用:快速的检索到查找的内容
例如:索引类似于新华字典的拼音检索,没有索引时,需要全表扫描,有了索引之后,可以快速的定位到查找的内容
在这里插入图片描述
在这里插入图片描述

二、索引威力体验

先安装测试数据库(30万条数据)
下载地址:https://github.com/datacharmer/test_db
解压压缩包:
在这里插入图片描述
解压之后,在cmd中切换到该目录下:
D:\1912A\Java基础\03.03\test_db-master
在这里插入图片描述
在这里插入图片描述
重新连接到mysql数据库服务器
在这里插入图片描述
使用explain 命令检测sql语句的执行情况
explain 执行的sql语句;
在这里插入图片描述
给first_name这个列加上索引之后,再来查看
添加索引:alter table employees add key 索引名字(列名);
例如:alter table employees add key fkey(first_name);

在这里插入图片描述
三索引分类
1.主键索引(primary key)
用来唯一的标识数据表中的某一条记录,必须用于整数列,例如:id
在这里插入图片描述
2. 唯一索引(unique key)
用来表示某一列的值,不能重复,必须用于字符列,例如:姓名、邮箱、昵称
在这里插入图片描述
普通索引(key)
最基本的索引,是我们经常使用到的索引。
一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;

  1. 联合索引
    联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。
    例如索引是key index (a,b,c). 可以支持a |a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
    复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。
    如果您知 道姓,电话簿将非常有用;
    如果您知道姓和名,电话簿则更为有用,
    但如果您只知道名不姓,电话簿将没有用处。
    在这里插入图片描述
    5. 全文索引

三、添加索引

第一种方法,在创建表时就指定索引:

create table index_test(
    id int auto_increment,
    name varchar(32),
    age int,
    introduce varchar(255),
    primary key(id),    --主键索引
    unique key(name),   --唯一索引
    key(introduce),     --普通索引
    key(name,age)        --联合索引
);

第二种方法,创建表之后再添加索引:

create table index_test2(
    id int,
    name varchar(32),
    age int,
    introduce varchar(255)
);

--修改数据表,添加索引
alter table index_test2 add primary key(id);  --添加主键索引
alter table index_test2 add unique key(name);  --添加唯一索引
alter table index_test2 add key(introduce);    --添加普通索引
alter table index_test2 add key(name,age);    --添加联合索引

添加索引之后,如何查看数据表有哪些索引?
show create table 表名;
在这里插入图片描述

四、删除索引

alter table 表名 drop primary key; 删除主键索引
alter table 表名 drop key 索引名称; 删除其他索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、索引应用场景

哪些场景适合用索引
1.出现在where条件中的字段
select * from index_test where name = “张三”;
这样就会去索引页查找name=张三的记录在什么位置
在这里插入图片描述
2.出现在order by排序中的字段
3.join关联查询字段,作为连接点的字段
在这里插入图片描述
频繁查询/使用的字段

哪些场景不适合用索引
1.不经常查询的字段不适合建索引
2.不会出现在WHERE子句中字段不该创建索引
3.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
select * from emp where sex = '男‘
4. 更新非常频繁的字段不适合创建索引
select * from emp where logincount = 1

六、自主练习

大家比较一下连接查询时,没有索引时,翻多少页;添加索引之后,翻多少页就能找到需要的内容。
查询时,一定要使用where条件,否则会进行全表扫描(从第一页翻到最后一页)
即使前面查找到结果了,依然会查到最后一页
在这里插入图片描述

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperProgMan.SYJ

你的鼓励将是我创作更大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值