2020-10-10

MySQL索引知识节点

  1. 索引: 索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。
  2. 索引的数据结构: 常见的MySQL主要有两种数据结构,Hash索引和B+树索引,我们使用的InnoDB引擎,默认的是B+树。
  3. Hash和B+树索引区别,优缺点,使用场景
    Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的。对于区间查询是无法直接通过索引查询的,这就需要全表扫描。所以哈希索引只适用于等值查询的场景。比如= IN !=这样的等值索引。
    而B+树是一种多路平衡查询树,所以它的节点是天然有序的(左子节点小于父节点,父节点小于右子节点)。所以对于范围查询的时候不需要做全表扫描。
    B+树和Hash索引区别: 哈希索引适合等值查询,但是无法进行范围查询,哈希索引无法利用索引完成排序,哈希索引不支持多列联合索引的最左匹配规则,如果有大量重复键值值的情况下,哈希索引的效率会很低。因为存在哈希碰撞问题。
  4. B+树的叶子结点都可以存那些东西
    InnoDB的B+树可以存储整行数据,也可以存储主键的值。
    在InnoDB里,索引B+树的叶子结点存储了整行数据的是主键索引,也被称之为聚簇索引,而索引B+树节点存储了主键的值是非主键索引,也被称之为非聚簇索引。
    聚簇索引查询会更快,因为主键索引树的叶子结点直接就是我们要查询的整行数据,而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询,这个过程叫回表,如果查询条件简单的话,只需要回表一次,如果复杂的话,需要多次回表查询。这里可以通过覆盖索引解决。
    覆盖索引: 指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取,也可以称之为索引覆盖。
    表sample中有个普通索引idx_k1_k2(k1,k2)
    select k2 from sample where k1 = 'key’的时候就可以通过覆盖索引查询,无需回表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值