0%

mysql---索引

常见索引模型

  • 哈希表
    适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。
  • 有序数组
    适用于静态存储引擎; 等值查询和范围查询效率都很高, 但是更新效率低.
  • 搜索树
    • 二叉搜索树
      查询和更新都是O(logn)
    • N叉数
      适配磁盘的访问模式, N取决于数据块的大小

InnoDB索引

在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。所以可以理解为 每一个表是好几棵B+树, 新建索引就是新建一颗B+数

主键索引/聚簇索引

叶子节点存储的是整行数据

自增主键

自增主键是指自增列上定义的主键,在建表语句中一般是这么定义的: NOT NULL PRIMARY KEY AUTO_INCREMENT
优点:

  • 性能高: 每次插入一条新记录,都是追加操作,都不涉及到挪动其他记录,也不会触发叶子节点的分裂。
  • 存储空间小: 整形占4字节, 主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小

非主键索引/二级索引

叶子节点存储的是主键的值. ** 因此

覆盖索引

性能优化手段之一

即索引“覆盖了”我们的查询需求, 不需要回表操作

重建索引

索引可能因为删除,或者页分裂等原因,导致数据页有空洞,重建索引的过程会创建一个新的索引,把数据按顺序插入,这样页面的利用率最高,也就是索引更紧凑、更省空间。

重建普通索引
alter table T drop inedx k
alter table T add index k
重建主键索引
alter table T engine=InnoDB

不用两个alter的原因是, 不管是删除主键索引还是创建主键索引, 都会使表重建, 那么一个alter就是无用功.