
本文共 1185 字,大约阅读时间需要 3 分钟。
一、MySQL中,对于自增的字段,如果将这个字段设为索引,那这个字段会从二叉查询树退化成链表查询(单边查询,如:查找第6个(行)数据,将会查询6次,这是个弊端)
二、红黑树会自动平衡,但是二叉平衡树追求绝对平衡,红黑树是局部平衡
三、二叉平衡树(红黑树),优化控制高度(限制高度,延长宽度,可以减少磁盘IO),
mysql的io容量大概在16kb,可以通过show global status like 'innodb_page_size'进行查看,所以树的节点不能太大,高度控制了宽度也应该有个度
四、mysql改造了B Tree,形成独有的B+Tree
B+Tree的右箭头属于另一种hash指针,hash查询比B+Tree查询快很多,但是缺点是:无法范围查找,或者会出现hash碰撞
五、存储引擎:是形容数据库中的表(不同的表对于的存储引擎也不一样,如图:)
六、在C:\ProgramData\MySQL\MySQL Server 5.7\Data文件夹中的文件说明
6.1、frm表结构
6.2、MYD存数据
6.3、MYI存储索引(二叉树、BTree、B+Tree)
6.4、idb索引和数据的合集(MYD和MYI合集)
不同存储引擎的底层存储结构不同,如:下图没有MYD、MYI文件(合并成ibd了)
6.5、idb文件结构(innoDB存储引擎)(不用回表)
七、innoDB引擎
表数据文件本身就是按照B+Tree组织的一个索引结构文件
八、聚集索引(也叫聚簇索引)——innoDB引擎就是聚集索引,也就是B+Tree(叶子节点包含了完整的数据记录)
非聚集索引——MylSAM索引(索引文件与数据文件是分离的,占两个文件)
问:为什么innoDB表必须要有主键,并且推荐使用整形的自增主键?
答:innoDB没有建主键,会自己选择一列为主键(不重复的、合格的字段),如果没有一列合格,innoDB会自己在后台生成一个列作为主键(你看不到)。
使用整形比使用uuid查找效率更高
九、单值索引与联合索引
联合索引的底层存储结构长什么样?
十、为什么非主键索引底层结构叶子节点存储的是主键值?
一致性和节省存储空间
十一、explain
十二、MyISAM与InnoDB 的区别(9个不同点)
面试题:
1、什么列不可以建立索引
增删改比较多的
重复类多的(name相同的)
2、innoDB可以不建立主键吗? 但是innoDB创建表后会出现3个隐藏字段
答:可以不建立,但是必须要有主键
- 会去查找一个unique并且没有null的字段作为主键
- row_id做为主键
3、为什么提倡int自增作为主键
- 有序
- 索引对比
- 有可能形成连续的内存空间
https://www.cs.usfca.edu/~galles/visualization/BST.html
发表评论
最新留言
关于作者
