美文网首页
MySQL索引概念小记

MySQL索引概念小记

作者: 洛克黄瓜 | 来源:发表于2019-07-25 22:33 被阅读0次
  • 索引是存储引擎用于快速找到记录的一种数据结构
  • 索引可以包含一个列或多个列的值,多个列的话,顺序很关键。
  • 大多数索引使用的是B-Tree数据结构,InnoDB则使用的是B+Tree(属于B-Tree变种)。
  • B-Tree意味着所有值是按顺序存储的,而且每一个叶子节点到根的距离相同。

DEMO:key(last_name, first_name, dod)

可以使用B-Tree索引的查询类型

  1. 全值匹配
    • 指和索引所有列均进行匹配
  2. 匹配最左前缀
    • 只使用索引的第一列
  3. 匹配列前缀
    • 是匹配开头部分,如last_name like L%匹配L开头的name字段
  4. 匹配范围值
    • 查找last_name在Allen和Barry之间的数据,属于匹配范围
  5. 精准匹配某一列并范围匹配另外一列
    • 精准匹配的列需要在索引中比范围匹配的列要靠前,last_name为Allen,frist_name以字母K开头。
  6. 覆盖索引
    • 查询的内容列都在索引中,查询仅仅需要访问索引,无需访问数据行

B-Tree索引的限制

  1. 如果不是按照索引的最左列开始查找,则无法使用索引
    • 例如DEMO中,无法查找first_name为Bill的人,也无法查找特定生日(dod)的人,因为这两列都不是索引的最左列;同理,无法查找last_name以某个字母结尾的人
  2. 不能跳过索引中的列
    • DEMO中,无法查找last_name=Allen并且特定日期出生的人,没有指定first_name则只能使用到索引的last_name
  3. 如果查询中有某个列的范围查询,则其右边的列就无法使用索引优化查找
    • DEMO中,查询where last_name = 'bla' and first_name like 'J%' and dod = '2019-12-12',这个查询只能用到索引的前两列,因为这里like是一个范围条件 ,如果范围查询的列值有限,建议可以通过使用多个等于条件来代替范围查询,这样就可以用到索引里的多列了

相关文章

  • MySQL索引概念小记

    索引是存储引擎用于快速找到记录的一种数据结构。 索引可以包含一个列或多个列的值,多个列的话,顺序很关键。 大多数索...

  • Mysql之索引的基本概念语法

    1.Mysql中索引的概念 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检...

  • 02-索引

    一、索引的概念 1、索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据...

  • 索引优点和缺点

    概念 MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。可以得到索引的...

  • MySQL和ES的索引对比

    [toc] MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,...

  • 阿里P8大佬MySQL笔记:关于索引必须知道的知识

    mysql索引的各种概念 在学习索引的时候,常常会看到回表、覆盖索引、索引下推、页分裂等等概念,本篇就常见概念进行...

  • MySQL索引小记

    先说一下存储引擎 MySQL5.1.X之前默认是MyISAM,从MySQL5.5.X开始,默认存储引擎为InnoD...

  • MySQL索引实现及优化

    MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论...

  • MySQL索引

    概念 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。索引的本质是一种数据...

  • 索引、用户及授权、备份、Percona

    MySQL索引 基本概念 索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:它是快速查...

网友评论

      本文标题:MySQL索引概念小记

      本文链接:https://www.haomeiwen.com/subject/vaehrctx.html