普通索引和唯一索引的区别以及何时需要建立索引

           

大家好,我是IT修真院上海分院第6期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务1中普通索引和唯一索引的区别以及何时建立索引的探讨。

一、背景介绍

索引作用:简而言之,加快搜索速度

常见索引分类:普通索引,唯一索引,主键索引,全文索引,组合索引

今天主要探讨普通索引,唯一索引和主键索引,不涉及全文索引和组合索引

二、知识剖析

普通索引:最基本的索引,相对于唯一索引和主键索引无特殊限制

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,将整个数据表变成聚集索引

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,将整个数据表变成聚集索引

唯一索引与主键索引不一样的地方:

①本质:主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

②包含关系:主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。

③空值:唯一性索引列允许空值,而主键列不允许为空值。

④默认创建:主键列在创建时,已经默认为空值 + 唯一索引了。

⑤主键唯一性:一个表最多只能创建一个主键,但可以创建多个唯一索引。

⑥引用外键:主键可以被其他表引用为外键,而唯一索引不能。

索引原理:

几乎所有索引都是单独建立目录,里面按顺序(B-Tree)存储着字段所有值和对应的主键,然后在索引中找到查询的字段后,依靠此主键去聚集索引中查询该条信息

三、常见问题

既然索引这么牛,那我是不是应该每个字段都加一个呢?

答案当然是否定的

建立一个索引,就会将该字段的值取出来排序重新建立一个目录,每一个字段建立的目录都不一样,互不影响,所以,每新建一个索引:

1.增删改的速度就会慢上一分,因为得去修改相应目录

2.表格体积就会更臃肿,因为目录也是要占用空间的

四、解决方案

这些情况下不适合用索引:

1.字符长度过长不适合建

2.字段较少不适合建

3.数据较少不适合建

4.查询较少不适合建

5.更新频繁不适合建

6.唯一性差的字段不适合建

五、编码实战

针对师兄几个问题,测试如下

首先往名字设置唯一索引的表格添加十条数据

普通索引和唯一索引的区别以及何时需要建立索引_第1张图片

再添加一次,数据相同,大家知道,肯定是插入失败


普通索引和唯一索引的区别以及何时需要建立索引_第2张图片

此时,数据库里还是只有十条数据的,我再随便加入一条确定好可以发现


普通索引和唯一索引的区别以及何时需要建立索引_第3张图片

从上图可以看到,id 11被跳过了,所以应该是先增加再删除

六、扩展思考

使用索引需要注意的点

1.尽量先装载数据再建立索引

2.like模糊查询时,带索引字段关键词不要使用左模糊查询和全模糊查询

3.一个表的索引尽量不要超过三个,严禁超过五个

4.在varchar等字段类型上建立索引时,须指定索引长度,可以提高速度节约空间减少IO操作

5.索引不会包含有null值的列

6.有where子句的情况下order by子句索引会失效,建议建立复合索引

7.不要在查询列上进行运算,也会导致索引失效

使用误区

1.宁缺毋滥,认为一个查询就需要建一个索引。

2.宁滥勿缺,认为索引会消耗空间、严重拖慢更新和新增速度。

3.抵制唯一索引,认为业务的惟一性一律需要在应用层通过“先查后插”方式解决。

七、参考文献

阿里开发手册

https://zhuanlan.zhihu.com/p/23624390

https://www.cnblogs.com/luyucheng/p/6289714.html

八、更多讨论

1.

应用层即在java中使用判断语句来判断数据是否重复,如果重复,则会跳出警告并且不会添加此条信息,而唯一索引抛出异常是数据库本身的操作,所以当高并发的情况下,如果提交数据存在延迟,使用第一种情况就有可能造成数据的重复从而造成业务错误,而在数据库中使用唯一索引判断则不会出现此情况,感谢师兄的补充,对于高并发的确是我知识点的空缺


普通索引和唯一索引的区别以及何时需要建立索引_第4张图片

2.

关于此问题,就要涉及到索引的原理了,因为唯一索引是先从索引目录中找指定字段,找到后根据指定字段的主键去聚集索引里找寻,所以比直接利用主键索引多了一个步骤,因此,使用主键索引查找一定是更快的。

3.

在唯一索引中,只要设置允许null值,那么无论多少个Null,其值都是不重复的,因为java中规定null不为任何值。但是如果某一列存在null,那么这一列的索引在查找时也就失效了,所以一般设置索引的列都不准输入值为空。

以上是本次小课堂的主要内容

本次小课堂PPT

本次小课堂视频

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起修仙吧~

直接点击此链接:http://www.jnshu.com/login/1/22137050

你可能感兴趣的:(普通索引和唯一索引的区别以及何时需要建立索引)