大家好,我是IT修真院成都分院第8期的JAVA学员邹苏,一枚正直纯洁善良的java程序员。
今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点————唯一索引和普通索引的区别是什么,什么时候需要建唯一索引?
一、背景介绍
索引是什么?
一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。请记住这一点:索引是一种数据结构 。
什么样的数据结构可以作为索引?
1、B-Tree 是最常用的用于索引的数据结构。因为它们是时间复杂度低, 查找、删除、插入操作都可以在对数时间内完成。另外一个重要原因存储在B-Tree中的数据是有序的。
但是,在某些情况下,你在创建索引时可以指定索引要使用的数据结构。
2、哈希表是另外一种你可能看到用作索引的数据结构-这些索引通常被称为哈希索引。使用哈希索引的原因是,在寻找值时哈希表效率极高。哈系索引的工作方式是将列的值作为索引的键值(key),和键值相对应实际的值(value)是指向该表中相应行的指针,所以,如果使用哈希索引,对于比较字符串是否相等的查询能够极快的检索出的值。哈希表是无顺的数据结构,对于很多类型的查询语句哈希索引都无能为力。比如你想要找出所有小于40岁的员工。这个时候就不可行,这就是为什么哈希索引通常不是数据库索引的默认数据结构-因为在作为索引的数据结构时,其不像B-Tree那么灵活。
3、使用R-Tree作为数据结构的索引通常用来为空间问题提供帮助。例如,一个查询要求“查询出所有距离我两公里之内的星巴克”,如果数据库表使用R- Tree索引,这类查询的效率将会提高。
普通索引和唯一索引的区别:
1、普通索引
普通索引(由关键字key或index定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(wherecolumn=)或排序条件(orderbycolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。
2、唯一索引
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了mysql对这个索引的管理工作,这个索引也因此而变得更有效率;二是mysql会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,mysql将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
什么情况下需要唯一索引?
1: 基本原则是如果表中某列在查询过程中使用的非常频繁,那就在该列上创建索引。如where条件后经常使用的字段,且字段数据唯一的话,最好建立唯一索引
2: 该字段的内容不是唯一的几个值。也就是不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引
3: 字段内容不是频繁变化
4:表记录太少的肯定不需要
使用数据库索引会有什么代价?
1:索引会占用空间 - 你的表越大,索引占用的空间越大
2:性能损失(主要值更新操作),当你在表中添加、删除或者更新行数据的时候, 在索引中也会有相同的操作
主键索引和唯一索引的不同?
一个表的主键只能有一个,而唯一索引可以建多个。
主键可以作为其它表的外键。
主键不可为null,唯一索引可以多个数据为null。
PPT:PPT
腾讯视频:
感谢大家观看!
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
我的邀请码:17701057,或者你可以直接点击此链接:http://www.jnshu.com/login/1/17701057