什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

分享人:王汇通

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

9.鸣谢

1.背景介绍

什么时DB索引

索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。

例如这样一个查询:select * from student where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

从数据搜索实现的角度来看,索引也是另外一类文件/记录,它包含着可以指示出相关数据记录的各种记录。其中,每一索引都有一个相对应的搜索码,字符段的任意一个子集都能够形成一个搜索码。这样,索引就相当于所有数据目录项的一个集合

索引的种类

唯一索引:唯一索引是不允许其中任何两行具有相同索引值的索引

主键索引:数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键,该索引要求主键中的每个值都唯一

聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引

索引列:可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行

索引的基本特点

第一是:建立索引的目的是加快对表中记录的查找或排序,创建索引可以大大提高系统的性能

第一是:通过创建唯一索引,可以保证数据库表中每一行数据的唯一性

第二是:可以大大加快数据库的检索速度

第三是:可以加快表和表之间的连接,特别是在实现数据库的参考完整性方面方面

第四是:在使用分组和排序子句进行检索时,同时可以减少查询中分组和排序时间

索引有哪些优点

一丶在设计数据库时,通过创建一个唯一索引,能够在索引和信息之间形成一对一映射关系,增加数据库的唯一性

二丶能够提高数据库的搜索以及检索速度,符合数据库建立的初衷

三丶能够捡块表和表之间的连接速度

在信息检索过程中,若使用分组以及排序子句进行时,通过建立索引能够有效的减少检索过程中所需的分组以及排序时间,提高效率

2.知识剖析

数据库多大的数据量下建索引会有性能的差别?

数据库中的索引储存引擎面用于快速查询找到记录的一种数据结构,索引对性能的影响非常重要,特别是在表中数据量达到百万级别的 时候,有无索引,或造成的性能差别非常大,正确的索引会极大提高查询的效率,就好比如一本书的目录,没有目录的情况查找的比较慢 有的话,查询速度截然相反

什么样的情况下该对字段建索引?

1丶表的主键,外键必须有索引

2丶数据量超过300的表应该有索引

3丶经常与其它表进行连接的表,在连接字段上应该建议索引

4丶经常出现weher子句中的字段,特别是大表的字段,应该建立索引

5丶索引应该建立在选择性高的字段上

6丶表的主键,外键必须有索引

什么是联合查询?

将多次查询(多条select语句), 在记录上进行拼接(字段不会增加)

基本语法:多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)

什么是最左匹配原则?

我们在建立联合查询的时候,也就是对多个字段建立索引,这个时候数据库会让我们选择索引的顺序, 比如我们想在a,b,c,三个字段上建立一个联合查询,我们可以选择自己想要的优先级,a,b,c或者b,a,c等顺序 这个选择的顺序就引出了最左匹配原则。

举个列子看索引的执行情况

select * from student where c = '1'

上面的句子不会执行index索引

select * from student where a = '1'

索引是有序的,index1索引在索引的文件中排列是有序的,首先是跟据a来排序 然后是b来排序,最后是c排序

3.常见问题

一丶什么情况下不适合建立索引?

二丶主键索引和唯一索引的区别?

三丶创建索引需要注意什么?

4.解决方案

什么情况下不适合建立索引?

1丶对于查询过程中很少使用或参考的列,不应该建立索引

2丶对于哪些只有很少数据值的列,不应该建立索引

3丶对于那些定义image,text,和bit数据类型的列,不适合创建索引

4丶当修改性能远大于检索性能,不应该建立索引

主键索引和唯一索引的区别?

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

1丶主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。

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

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

创建索引需要注意什么?

1丶限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

2丶避免在取值朝一个方向增长字段上,建立索引,由于字段的取值总是朝一个方向增长,新记录i总是放在索引的最后一页中,从而不断的引起该页的访问竞争

3丶删除不再使用,或者很少被使用的索引,表中的数据大量更新时,或者数据的使用的方式被改变后,原有的一些索引可能不再被需要

5.编码实战

6.扩展思考

怎么使用索引才能提高索引的命中?

7.参考文献

参考一:百度

参开二:简书

参考三:知乎

8.更多讨论

9.鸣谢

感谢观看,如有出错,恳请指正