⼀⽂看懂MySQL索引type级别意思
我们可以清楚的看到type那⼀栏有index、ALL、eq_ref,他们都代表什么意思呢?
⼀⽂看懂MySQL索引type级别意思
索引type级别说明:
system>const>eq_ref>ref>range>index>ALL
这是type级别,越左边,查询速度越快。
怎么样才能让type靠左呢,就是建⽴索引。最左边的俩级,基本达不到。我们让查询type达到第三级和第四级就很好了,为什么这么说呢?
表主键,唯⼀索引也只能达到eq_ref级别的。
如果不做索引的话 肯定都是ALL了。
Type级别解释
1、system级别
A、只有⼀条数据的系统表
B、或衍⽣表只能有⼀条数据的主查询
很明显 实际开发当中 我们是不会只有⼀条数据的
2、const级别
仅仅能查出⼀条的SQL语句并且⽤于Primary key 或 unique索引;
SELECT * from shop s where s.id=?
mysql下载后为什么不是一个安装包主键索引、唯⼀索引和unique索引达到这个级别,我们写sql要根据公司的业务去写,这个情况也很难达到的。
3、eq_ref级别
唯⼀性索引:对于每个索引键的查询,返回匹配唯⼀⾏数据(有且只有1个,不能多,不能0);
⽐如你select …from ⼀张表 where ⽐⽅说有⼀个字段 name = ⼀个东西,也就是我们以name作为索引,假设我之前给name加了⼀个索引值,我现在根据name去查,查完后有20条数据,我就必须保证这⼆⼗条数据每⾏都是唯⼀的,不能重复不能为空!
只要满⾜以上条件,你就能达到eq_ref,当然前提是你要给name建索引,如果name连索引都没,那你肯定达不到eq_ref;
此种情况常见于唯⼀索引和主键索引;
⽐如我根据name去查,但是⼀个公司⾥⾯或⼀个学校⾥⾯叫name的可能不⽌⼀个,⼀般你想⽤这个的时候,就要确保你这个字段是唯⼀的,id 就可以,你可以重复两个张三,但是你⾝份证肯定不会重复;
添加唯⼀键语法:alter table 表名 add constraint 索引名 unique index(列名)
检查字段是否唯⼀键:show index form 表名;被展⽰出来的皆是有唯⼀约束的;
4、ref级别
ref级别的问题不⼤。
⾮唯⼀性索引:对于每个索引键的查询,返回匹配的所有⾏(可以是0,或多个)。
假设有俩张三,我建⽴了⾮唯⼀索引,那么查出来就是这个级别拉,是不是很简单。
5、range级别
检索指定范围的⾏,查⼀个范围内的数据,where后⾯是⼀个范围查询 (between,in,> < >=); in有时有可能会失效,导致为ALL;
(in失效的情况 我是没试出来…) 你们可以试试
6、index级别
把索引的数据全查出来 就是这个级别了
7、ALL级别
不做索引 就是all级别咯

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。