什么是数据库中的索引

数据库的索引

索引是什么?

  • 数据库中的表,数据,索引之间的关系就和图书,书籍内容和书籍目录的关系是一样的.
    数据库的索引(index)就好比书的目录.能帮助我们快速定位检索数据,来提高查找效率.

索引要解决的问题

  • 因为针对数据库进行顺序查找的话效率很低,数据库的数据在磁盘上,磁盘访问速度慢,并且数据量也可能非常多,速度就会更慢,引入索引就是防止顺序查找。

索引可以考虑的数据结构
1.哈希表

  • 哈希表的查找效率是O(1)
    数据库的索引可以考虑哈希,但是SQL语句有很多逻辑关系,例如范围查找和大于等于等情况,哈希只能处理相等的情况不能处理其他的逻辑.哈希的查找过程是拿到key值把key代入哈希函数计算然后得到下标, 再根据下标获取到对应的链表,再去遍历比较key是否相等.

2.二叉搜索树

  • 查找效率是O(N) 其内部的元素是有序的(中序遍历),更容易查找一些带区间的元素
    相比哈希表二叉搜索树虽然能处理范围查找但是效率不高.不选择二叉搜索树的原因还有:
  • 二叉搜索树每个节点最多两个叉,当数据量比较大的时候,树的高度就会很高,最终的操作效率也就会越低.
  • 直接获取到中序遍历效率也不高
  • 二叉树每个节点只存储一个记录,一次查询在树上找的时候花费磁盘io次数较多

.
那真实的索引结构是什么样的?一种n叉搜索树 即B+树
先认识B-树 也就是B树,下图为B树
什么是数据库中的索引_第1张图片

B树和二叉树的差异

  1. 每个节点不是2叉是n叉,在b树上查找 就是一个n分查找,效率比2分还要快。
  2. 每个节点不是存了一个数据 而是可能存了多个数据,每个节点存的数据的个数和该节点的度是相关的.由于每个节点存了多个数据,每个节点又有多个度所以和二叉树相比在保存相同个数元素情况下,b树的高度就会比二叉树低很多
  3. 处理范围查找也更容易一些
    下图为B+树
    什么是数据库中的索引_第2张图片

B+树和B树相比优点有哪些

  1. 每一层的元素之间都连接到一起,不需要进行额外的中序遍历,处理范围查找就更高效
  2. 数据只在叶子节点上保存,非叶子节点不再保存数据 只保存一些辅助查找的边界信息.因为数据都在叶子节点中所以查询任何一条记录的速度都是比较平均的,不会出现效率差异大的情况
  3. 叶子节点存在磁盘上,非叶子放到内存中,减少读磁盘的次数,使得查找效率变高

注意:加在主键的索引和其他列上的索引是不同的

  • 主键索引的叶子节点存就是一条完整的记录,其他索引的叶子节点存的是主键id 根据主键查找一次就能找到.根据其他字段查找
    就先通过索引找到其对应的主键id 再根据主键id去主键索引中查到具体记录(这一过程叫做回表)

索引的应用场景:
索引起到的效果就是:加快查找效率,减慢插入,修改和删除效率
索引会占用额外的空间(本质上是使用空间来换时间)
(1)对于插入、删除数据频率高的表,不适用索引
(2)对于某列修改频率高的,该列不适用索引
(3)通过某列或某几列的条件查询频率高的,可以对这些列创建索引
索引的使用

  • 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建 对应列的索引。

  • 查看索引
    show index from 表名;

  • 创建索引
    create index 索引名 on 表名(字段名);

  • 删除索引
    drop index 索引名 on 表名;

你可能感兴趣的:(笔记)