美文网首页
MySQL 索引

MySQL 索引

作者: pokorz | 来源:发表于2019-08-09 08:44 被阅读0次

本文主要以面试题为主梳理索引知识脉络
解决如下几个问题

  1. 索引是什么, 为什么要引入索引
  2. 有哪些索引的实现方式, 他们的优缺点是什么
  3. InnoDB的索引模型
  4. 主键索引与非主键索引的区别
  5. 选用什么作为主键, 为什么要用自增id 作为主键
    ...

如何实现索引? 实现索引的方式

  1. Hash表
    1.1 Hash 冲突 怎么处理
    1.2 无法解决范围查询, 适用于等值查询的场景

  2. 有序数组
    2.1 有序数组的优点, 等值查询与范围查询性能优秀
    2.2 查询记录成本太高, 只适用于静态存储

  3. 二叉树
    3.1 二叉树特点: 左节点<父节点<右节点
    3.2 查询复杂度 ologn
    3.3 维持平衡, 插入复杂度也是o(lgn)
    3.4 二叉与多叉树,尽可能少的读取磁盘, 使用多叉树。至于多少叉,则取决于数据块的大小。

  4. 扩展更多..
    4.1 跳表
    4.2 LSM树

InnoDB的索引模型

  1. 主键索引与非主键索引的区别
    1.1 主键索引的叶子节点存储的是整行数据
    1.2 非主键索引的叶子节点存储的是主键的值
    通过非主键索引的查询需要多查询一颗B+树;应该尽量使用主键索引。
  2. 索引维护
    2.1 页分裂
    如果插入不是有序的,容易造成页分裂。
    2.2 页合并
    2.3 由页分裂引出的为何要有自增主键
    自增主键,每次都是递增插入, 都是追加操作,不涉及挪动其他记录,不会触发叶子节点的分裂。
    另外使用自增主键,可以使得普通索引的叶子节点占用空间越小。
    重建索引可以使得索引更紧凑更利用空间。

覆盖索引

非主键索引查询结果(只查询自增id)已经满足了查询需求,不需要回表查询。
回表查询: 通过非主键索引查询到的结果,只是主键id,还需要根据主键id

联合索引使用技巧

  1. 联合索引中存在查询结果,就不需要进行回表

  2. 最左前缀原理,可以是联合查询的最左N个字段,也可以字符串最左M个字符串
    由于索引使用的是B+树结构, 所以可以利用最左前缀来定位记录。
    在建立索引的时候,如何安排索引的顺序
    2.1. 通过调整索引顺序可以少维护一个索引
    2.2. 空间(既有各自的查询,又有联合查询的时候)

  3. 索引下推
    MySQL5.6 引入: 在索引遍历过程中,对索引包含的字段先做判断,直接过滤掉不满足条件的记录,
    减少回表次数。

相关文章

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • MySQL索引的使用

    MySQL索引 MySQL索引可以快速提高MySQL的检索速度。索引分单列索引和组合索引单列索引:即一个索引只包含...

  • Mysql索引与锁

    本文以Mysql5.7为例测试。 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引。 ...

  • 索引(二)

    mysql索引的新手入门详解mysql索引之三:索引使用注意规则 索引(Index)是帮助 MySQL 高效获取数...

  • MySQL 索引分类

    MySQL索引的分类(根据数据结构) 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL...

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • mysql索引

    索引 mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度。索引分单列索引...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:MySQL 索引

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