mysql-(B+Tree)(1)

mysql 中MyISAM与InnoDB 都是用B+Tree  数据结构存储数据。但是有区别

MyISAM:

创建一个表,用MyISAM 引擎,会在存储磁盘生成三个文件

  1. my_table.frm -----> 表结构定义文件
  2. my_table.MYD -----> 用于存放数据
  3. my_table.MYI -----> 用于存放索引

   MyISAM 的索引和数据文件存放在不同的文件

InnoDB :

创建一个表,用InnoDB 引擎,会在存储磁盘生成两个文件

  1. my_table.frm -----> 表结构定义文件
  2. my_table.IDI -----> 用于存放索引和数据的

Inno DB的 数据文件和索引文件是在一个文件里:

 

公共:

 

1:叶子节点存储数据,非叶子节点存储索引

2:索引是排好序的

MyISAM和InnoDB 叶子节点data数据存储不同

MyISAM:存当前索引所在文件的地址

InnoDB:存当前索引所有列的数据

 

 

聚簇索引:主键索引

二级索引:非主键索引

InnoDB():

索引页:默认是16kB=16*1024=16384B, 

例:主键为bigint(索引)(8B),白色为下个节点磁盘地址(6B), 那么16384/14=1170个,

第一级别索引页默认有1170个索引

第二级别索引页,将会有1170*1170=136 9234 个索引页,根据数据的大小,第二级索引页所包含的数据数量不同。

第三级别数据页,存的时候数据和索引(主键索引)。

 

 

 

聚集索引:(第三级别数据页,存的时候数据和索引)

    非聚集索引:(第三级别数据页,存的时候主键索引地址和索引)

 

 

 

当一张表,有主键索引(聚集索引),非主键索引。

user表:

id(设置主键索引),name(非主键索引),age

三个查询:

第一:select *  from  user where  id=1

第二:select *  from  user where  name=1

第三:select *  from  user where  age=1

​​​​​​​第四:select name  from  user where  name=1

​​​​​​​​​​​​​​第五:select name ,age  from  user where  name=1

1:设置主键索引,设置非主键索引一个

2:每张表会根据设置多少索引,生成多少索树。   目前根据例子,会生成一个(ID)主键索引树,和一个  (name)索引树 

主键索引树:

非主键索引树:

 

三个查询:

第一:select *  from  user where  id=1

id是主键索引,那么数据,查询会查询主键索引树查询,找到叶子节点

第二:select *  from  user where  name=1

name是非主键索引,那么数据,查询会查询非主键索引树查询,找到叶子节点的主键索引地址,进行回表查询主键索引树,再根据主键索引找到叶子节点

第三:select *  from  user where  age=1

age是非主键索引,那么数据,查询会查询主键索引树查询(全表查询),找到叶子节点

​​​​​​​第四:select name  from  user where  name=1

name是非主键索引,并且查询的数据name也是索引数据,所以查询非主键索引树,不需要回表(因为索引就是数据)。

​​​​​​​​​​​​​​第五:select name ,age  from  user where  name=1

name是非主键索引,查询的数据name是索引数据,age是非索引,先查询非主键索引树,找到name所在的主键索引地址,进行回表(因为age不是索引,非主键索引没有数据)再根据主键索引查找主键索引树,找到name,age

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值