Mysql-索引(二)

1、索引是帮助MySQL高效获取数据的排好序的数据结构

2、索引数据结构

二叉树

红黑树:二叉平衡

Hash表:

      • 对索引的key进行一次hash计算就可以定位数据存储的位置
      • 很多时候Hash索引要比B+Tree索引更高效
      • 仅能满足 “=” “in”,不支持范围查询
      • hash 冲突问题

B-Tree:

      • 叶节点具有相同的深度,叶节点的指针为空
      • 所有索引元素不重复
      • 节点的数据索引从左到右递增排列

B+Tree

      • 非叶子节点不存储data(每一行数据磁盘文件地址),只存储索引(冗余),可以放更多的索引
      • 叶子节点包含所有索引字段
      • 叶子节点用指针连接,提高区间访问的性能

存储引擎:

MyISAM 索引文件和数据文件是分离的(非聚集)。体现为一张数据表有三个存储文件

InnoDB 聚集索引。体现为一张数据表有2个存储文件

表数据文件本身就是按照B+Tree组织的一个索引结构文件

聚集索引——叶节点包含了完整的数据记录

注:InnoDB 推荐使用整形的自增主键。不建主键会自动建一个隐藏主键列

使用innodb引擎的时候页大小默认是16K(常驻内存)

SHOW GLOBAL STATUS LIKE 'Innodb_page_size';

索引查询的效率高是因为树的高度变低了。通常来说B+Tree的层次就是2-4层,上千万的数据量仅需2-4次 I/O 就能准确定位。

叶节点的大小不做修改是默认为16kb,若(冗余)索引为bigint,再加上(连接)指针,即8b+6b=14b(估算),那每个叶节点能容纳的元素个数为:16kb=16*1024b,n=16*1024/14 ≈ 1170,表示叶节点大约可以存储1170个元素。再假设data为1kb,那就是可以容纳16个元素,那么非叶子节点总共就有:1170*1170*16 ≈ 2200万个元素。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值