首页标签分类
mysql索引
2023-03-04 · 更新 2026-03-03约 2 分钟 · 560 字
大数据杂文记
000

目录

innodb存储引擎
索引的数据结构
B+树存储
常见数据结构在mysql的使用
mysql中索引
适合创建索引的场景

innodb存储引擎

mysql中除了innodb,还有比如myisam,memory等其他引擎,innodb最常用

索引的数据结构

使用索引带来的查询性能提升:

  1. 减少了磁盘io
  2. 支持创建不同的索引,针对不同的查询场景适配

B+树存储

以聚簇索引为例:

  1. B+树中叶子节点同时存储了全部的行数据和主键id
  2. 多个记录组成一个page,page内记录间通过单向链表连接,多个目录页间通过双向链表连接
  3. 多个页信息被记录在目录页中,当超过目录页数量限制会产生新的目录页,当目录页数量达到限制,会产生存储目录页元数据的目录页
  4. B+树创建的顶级父节点是常驻在内存中的

常见数据结构在mysql的使用

  1. hash结构
    innodb不支持创建hash索引,hash索引的使用场景:java中的hashset
  2. 二叉搜索树
    如果我们利用二叉树作为索引结构,那么磁盘的IO次数和索引树的高度是相关的。
    树越矮胖,io次数越少
  3. avl树
  4. B树
    B树除了叶子节点存储数据,其他的节点也存储数据
  5. B+树
    B+树只有叶子节点存储完整的数据,同等大小的数据页,较B树就会更矮胖

mysql中索引

按照功能逻辑分类:普通索引,主键索引,唯一索引,全文索引
按照物理实现方式分类:聚簇索引,二级索引
按照作用的列分类:单列索引,联合索引

  1. 普通索引
plaintext
自动换行:关
放大阅读
展开代码
create test( id int, name varchar(12), province_id int, index(province_id) );
  1. 主键索引
plaintext
自动换行:关
放大阅读
展开代码
create test( id int auto_increment, name varchar(12), province_id int, primary key(id) );
  1. 唯一索引
plaintext
自动换行:关
放大阅读
展开代码
create test( id int, name varchar(12) , province_id int, UNIQUE INDEX uk_name(name) );
  1. 全文索引
plaintext
自动换行:关
放大阅读
展开代码
CREATE TABLE test4( id INT NOT NULL, info VARCHAR(255), FULLTEXT INDEX futxt_idx_info(info) ) ENGINE=MyISAM;
  1. 组合索引
plaintext
自动换行:关
放大阅读
展开代码
create test( id int, name varchar(12), province_id int, index id_name_dx(id,name) );

适合创建索引的场景

  1. 需要经常过滤的列
  2. 需要经常group by分组的列
  3. 需要distinct大量去重的列
  4. 可以对join中需要连接的列创建
  5. 对需要创建索引的大key取前缀索引,即减少了索引占用的大小,也提高了查询的效率
  6. 使用最频繁的列放到联合索引的左侧,否则可能用不上创建的联合索引

本文作者:hedeoer

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!