数据库索引原理解析

很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止,但有没有考虑过索引为什么能使查询变快呢?

索引是使用B+树(二叉树)实现的数据结构。

数据库索引原理解析

上图中左边是数据库中的数据表,有col1和col2两个字段,一共有15条记录;右边是以col2列为索引列的B_TREE索引,每个节点包含索引的键值和对应数据表地址的指针,这样就可以都过B_TREE在O(logn)的时间复杂度内获取相应的数据,这样明显地加快了检索的速度。

再来思考下以下几个问题:

1.数据表为什么会使用主键?

2.使用索引后会使插入、修改、删除变慢?

3.什么时候需要在两个字段上加索引?


1.数据表为什么会使用主键?

一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐。

一个加了主键的表,并不能被称之为「表」。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,并且是「平衡树」结构,换句话说,就是整个表就变成了一个索引。。 这就是为什么一个表只能有一个主键,一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。

数据库索引原理解析

给表中多个字段加上常规的索引,那么就会出现多个独立的索引结构.字段中的数据就会被复制一份出来,用于生成索引,叶子节点是主键ID,这也就是非聚集索引.,下面就是一个主键和三个常规索引的结构。

通过其他索引字段去查,那么叶子节点是主键ID,然后再去根据主键查,聚集索引(主键)是通往真实数据所在的唯一路径

数据库索引原理解析

2.使用索引后会使插入、修改、删除变慢?

这个很好理解,使用索引后,会生成新的二叉树,插入速度自然变慢

3.什么时候需要在两个字段上加索引?

 

参考文章:

了解数据库索引及其原理

MySQL为什么要给表加上主键