美文网首页
B+树索引

B+树索引

作者: lsh的学习笔记 | 来源:发表于2020-05-04 18:30 被阅读0次

B+树索引在数据库中有一个特点高扇出性,因此B+树的高度一般都在2 ~ 4层,也就是说查询某一键值的行记录最多只需要2到4次IO。机械磁盘每秒至少100次IO,2 ~ 4次IO意味着查询时间只需 0.02 ~ 0.04秒

B+树索引可以分为聚集索引和辅助索引。不同点叶子节点存放的是否是一整行的信息。


聚集索引(clustered index)

定义

按照每张表的主键构造一颗B+树,叶子节点存放整张表行记录数据,叶子节点数据页

由于实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引。

优点

  1. 能在叶子节点直接找到数据;
  2. 由于定义了逻辑顺序,所以对于主键排序查找范围查找速度非常快。如果要查找主键某一范围内的数据,通过叶子节点的上层中间节点即可得到页的范围,之后直接读取数据页即可。

辅助索引(secondary index)

  • 叶子节点不包含行记录的全部数据
  • 每个叶子节点的索引行包含一个书签(bookmark),即相应行数据的聚集索引键。
  • 每张表可由多个辅助索引。

工作原理

  1. 先搜索辅助索引;
  2. 根据辅助索引的叶子节点的书签到主键索引上找完整的行记录。

举例:
如果辅助索引高度为3,聚集索引高度同样为3;那么需要6次逻辑IO才能得到最终的数据页。


索引管理

1. 查看

show index from table_name;
  • Table:索引所在表名。
  • Non_unique:非唯一索引。
  • Key_name:索引的名字,可以通过这个Drop index。
  • seq_in index:索引在该列中的位置。
  • Column_name:索引列的名称。
  • Collation:列以什么方式存储在索引中。可以是A或NULL。B+树索引总是A,即排序的。
  • cardinality:表示索引中唯一值的数据的估计值
  • Sub_part:是否是列的部分被索引。如果是整列为NULL,如果只对前100个字符进行索引,显示100。
  • Packed:关键字如何被压缩。
  • Null:是否索引的列含有NULL值。
  • Index_type:索引的类型。
  • Comment:注释。

2. 创建和删除

语法

alter table tbl_name add [index|key] [index_name] [index_type](index_col_name,...) [index_option]...

alter table tbl_name drop primary key | drop {index|key} index_name;
create [unique] index index_name [index_type] on tbl_name (index_col_name,...);

drop index index_name on tbl_name;

主键索引

创建
  1. 创建一张新的临时表,表结构为新的;
  2. 把原表数据导入临时表;
  3. 删除原表;
  4. 把临时表名改成原表名。
删除

和创建过程一样,需要重建一张表。

注意

因为需要创建临时表,必须保证有足够的空间存放临时表。

辅助索引

创建
  1. Fast Index Creation,FIC
    创建的时候在表上加一个S锁,不需要重建表,但是由于加锁,创建过程中只能读操作,如果有大量的事务写操作,会导致数据库服务不可用。

  2. Online DDL 在线数据定义
    允许DDL操作的同时进行DML操作。

删除

更新内部视图,将辅助索引的空间标记为可用,同时删除内部视图上对该表的索引定义。

Cardinality值

表示索引中不重复记录数量的预估值。

是一个预估值,并且不是实时更新的。如果需要更新,使用analyze table;命令,建议在非高峰时间,这能使优化器和索引更好的工作。

Cardinality / n_rows_in_table 应尽可能接近1。如果非常小,需要考虑是否有必要创建这个索引。

相关文章

  • 聊一聊B+树

    标签: 图解B+树 | B+树代码|mysql 聚集索引|mysql B+树索引| 前言   虽然B+是B-演化过...

  • B+树

    B+树概况 InnoDB使用了B+树索引模型 每个索引在InnoDB里面对应一棵B+树 B+树特点 m阶B+树每个...

  • Mysql DBA-索引篇

    索引类型: 1.按照数据结构角度:B+树索引,哈希索引,FULLTEXT索引 1)B+树索引: B+的特性:1.所...

  • 索引

      InnoDB支持B+树索引、全文索引、哈希索引三种索引方式。 B+树的创建和删除操作   B+树的B是平衡(B...

  • MYSQL的索引与B+Tree

    MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的。在介绍 B...

  • mysql学习笔记(二) 索引

    1. 引子 InnoDB存储引擎支持以下几种常见的索引: ❑B+树索引 ❑全文索引 ❑哈希索引 2. B+树索引 ...

  • MySQL系列-InnoDB索引

    B+树索引 B+树索引就是传统意义上的索引,这是目前关系型数据库系统中查找最为常用的和最为有效的索引。 B+树的结...

  • InnoDB-索引

    四、索引 mysql支持的常见索引:B+,全文、hash 1.B+树索引 B+树索引可以分为聚簇索引和非聚簇索引。...

  • 索引相关

    1.MySQL中使用较多的索引有Hash索引,B+树索引2.InnoDB默认索引实现为:B+树 hash索引 1....

  • 第五章 索引与算法

    InnoDB存储引擎支持的常见索引:B+树索引,全文索引,哈希索引 B+树索引能找到的只是被查找数据行所在的页,然...

网友评论

      本文标题:B+树索引

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