Mysql索引结构

一、索引结构

mysql索引数据结构有hash和b+tree,hash由数组和链表组成。hash不支持范围查找。

B-Tree由红黑树(从左到右为小中大)变化而来,不同的是btree一个节点里面有多个节点,并且节点含有数据。B+tree(有冗余节点)是B-tree的变种,详细区别看图。

二、索引

在mysql启动时会把数据库索引加载到内存中,后续索引到的数据也会缓存到内存中

1、MyISAM存储引擎

节点存的不是表数据,而是表数据文件中对应的地址。这就是回表操作和innodb中的二级索引类似。

2、Innodb存储引擎

除主键索引外,其他索引都是二级索引(辅助索引)。二级索引查找的过程为先在二级索引找到主键索引的key,再在主键索引中查找(回表操作)。如果表没有建主键,mysql会自己维护一列看不到的数据,保证有一列数据是唯一的。

Q:为什么innodb表一定要建主键,并且最好使用int自增作为主键

A:为了不用mysql维护唯一列数据,节省资源。建立和维护索引过程中需要进行key的比较,int类型更好比较。自增使得树结构不容易产生树结构分裂,更节省算力。

3、复合索引

复合索引排序原则是从左到右按照hash值(mysql内部算法)升序排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值