标签:htm 子节点 一个 内容 str 文件 mysql 统计信息 insert
B+树索引的本质就是B+树在数据库中的实现。但是B+树索引在数据库中有一个特点就是高扇出性,因此在数据库中,B+树的层高一般都在2~4层,意味着查询某一个键值的行记录最多需要2~4次IO。B+树索引分为聚集索引和辅助索引。
聚集索引就是根据数据表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点成为数据页。
聚集索引的存储并不是物理结构上连续的,而是逻辑上连续的。
辅助索引也称为非聚集索引,叶子节点并不包含行记录的全部数据。叶子节点除了包含键值之外,每个叶子节点中的索引行中还包含了一个书签。
该书签是用来告诉InnoDB存储引擎哪里可以找到与索引相对应的行数据,存储的具体内容是聚集索引的键。
辅助索引的存在并不影响数据在聚集索引的组织,所以每个表可以创建多个辅助索引,当通过辅助索引查询数据的时候,InnoBD先通过辅助索引查询到主键索引的主键,然后再通过主键索引来找到一个完整的行记录。
通过Alter table或者create/drop index 创建或者删除索引。查看某个表的索引可以通过 show index from table_name,结果如下图:
Cardinality值表示索引中不重复记录数据的预估值。Cardinality/n rows in table应该尽可能的接近1。
统计Cardinality是通过采样的方法完成的。Cardinality统计信息的更新发生在Insert或者Update操作中,但是并不是每次都会更新。更新策略为:
Cardinality采样是根据索引的8个叶子节点进行采样,然后通过8个节点预估出所有叶子节点的总和,得到Cardinality值,所以每次得到的值都不是准确不变的。
计算公式 Cardinality = (P1+P2+....+P8)* A/8 P为采样的节点1~8,A为叶子节点数量。
注意:如果表足够小,那么表的索引叶子节点小于或者等于8,那么每次计算的值就会相同。
5.5之前Mysql数据库对于索引的添加或者删除这类的DDL操作,过程为:
如果对一个很大的表进行这样的操作,非常损耗性能。所以出先了Fast Index Creation(FIC)的索引创建方式。
对于辅助索引的创建,在对应的表加上S锁。创建索引过程中不需要重建表,删除索引只要更新内部视图即可,并将辅助索引的空间标记为可用,同时删除Mysql数据库内内部视图上对该表的索引定义即可。
注意:临时表创建的目录是通过tmpdir参数设置,要保证有足够空间创建临时表。FIC操作的时候,加了S锁,所以这个时候只能对数据进行读操作。
在线架构改变(OSC)过程:
5.6之后支持在线DDL,一下操作都可以通过在线DDL解决:
具体语法内容相关,查看博客: https://www.cnblogs.com/cchust/p/4639397.html
标签:htm 子节点 一个 内容 str 文件 mysql 统计信息 insert
原文地址:https://www.cnblogs.com/wangb0402/p/12745341.html