mysql索引

现在在看Mysql索引相关内容,记录下,方便以后复习

索引是什么?索引是帮助高效获取数据的数据结构。

索引也可能是一个文件

其他类型:

-hash Map

hash保存的是数据的地址,通过地址可以直接访问到,速度也是非常快的。但是mysql语句有区间查询 类似于 WHERE id>2,这样的条件查询时,hash无法定位。

-二叉树

二叉树一个一个查找,当WHERE id=1000时可能就需要执行1000次IO,这样的效率太低

-红黑树

红黑树一样会执行多次IO,效率也不高。

-B-Tree

随着Tree的深度变大,IO次数变多

-B+Tree(MySQL底层使用的是B+Tree的定制化,也就是改进版的)

不管数据有多少,基本只需要3-5次IO


MySQL默认存储引擎是InnoDB。


MySQL的数据是以文件的形式存储的,在mysql文件目录下的data文件夹下。

.frm文件存的是表结构,.myi是索引文件,.myd是数据文件

MyISAM的索引和数据是分开的,也就是两个文件.myi和.myd,索引与数据分离叫做非聚集索引。索引存的数据格式为(KEY,DATA) DATA为表中数据的地址。



InnoDB是以主键为索引来组织数据的,如果没有设置主键,会自动给我们增加一个6位数的隐藏id来创建主键树,如果设置了别的属性为索引,索引的(KEY,DATA)DATA就是主键,再通过主键去获取到数据

.ibd是数据文件和索引文件一起 

InnoDB的索引和数据是在一起的,也就是.ibd文件,索引与数据在一起叫做聚集索引。索引存的数据格式为(KEY,DATA) DATA为表中的数据。


最后一个问题,为什么要用自增id作为主键?

我自己的理解,自增的id作为主键每次查找一个新的主键的时候当前B+Tree的改动比较小,直接插入到最右边,再进行小幅度变化即可。如果使用英文字母,每次插入都会插在中间,这样整个树的变化是比较大的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值