• java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

  • java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

Mysql 索引

目录

  • 目录
  • 索引的类型
    • b-tree
      • 可使用b-btree索引的有效查询
      • b-tree索引的限制
    • hash索引
      • hash索引的限制
    • rtree空间数据索引
  • InnoDB
    • 覆盖索引
    • 联合索引

索引的类型

b-tree

适用于全键值、键值范围、或键前缀查找

可使用b-btree索引的有效查询

  • 全值匹配
  • 匹配最左前缀
  • 匹配列前缀
  • 匹配范围值
  • 精确匹配某一列,并范围匹配另外一列
  • 只访问索引的查询(索引覆盖)

b-tree索引的限制

  • 非最左列开始
  • 不能跳过索引中的列
  • 如果有某个列的范围查询,则其右边的所有列都无法使用索引优化查询

hash索引

精确匹配索所有列的查询才有效。

hash索引的限制

  • hash索引只包含hash值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过访问内存中的行速度很快,大部分情况下这一点对性能影响并不明显。
  • hash索引数据并不是按照顺序存储,无法用于排序
  • hash索引不支持部分索引列匹配查找。如在列(a,b)建立索引,查找时只用a列,则不能使用hash索引。
  • 只支持 =、in、 <=>操作
  • 访问hash索引的数据非常快,除非有很多hash冲突,hash冲突,则遍历底层所有的行指针,逐行比较。直到找到符合所有条件的行。
  • 如果hash冲突很多的话,索引维护操作的代价也会很高。

rtree空间数据索引

用作地理数据存储,MySQL的gis支持不完善,基本不会使用这个特性。支持好的开源库有PostgreSql,PostGIS

InnoDB

主键索引也叫聚簇索引(clstered index),叶节点数据为整列值.
非主键索引也叫二级索引(secondary index),叶节点是主键值

  • 自适应哈希索引(adaptive hash index).innodeDb注意到某些索引值被使用的非常频繁时,会在内存中基于B-tree的索引之上再创建一个hash索引。这是一个完全自动的、内部的行文,用户无法控制,如果有必要,可以关闭其功能。

覆盖索引

只访问索引,而不需要访问数据

联合索引

最左原则,从mysql5.6之后,匹配最左m列 或者最左n个字符

shell 工具
aop流程
  1. 1. 目录
  2. 2. 索引的类型
    1. 2.1. b-tree
      1. 2.1.1. 可使用b-btree索引的有效查询
      2. 2.1.2. b-tree索引的限制
    2. 2.2. hash索引
      1. 2.2.1. hash索引的限制
    3. 2.3. rtree空间数据索引
  3. 3. InnoDB
    1. 3.1. 覆盖索引
    2. 3.2. 联合索引
© 2023 haoxp
Hexo theme