mysql的索引检索原理和存储引擎
一:什么是BTree
(1) BTree是平衡多路搜索树。它是在树的基础上演变而来的。它的每个节点就是个块。块里面的数据如下图:
主键能对应唯一的一条数据。因为它是多个节点,必须就要有指针去记录节点。
通过这个图发现,明显查找的性能提升了。首先IO的次数少了,也就是层数少了,IO的次数也变少了。并且采用数据块的形式,每次不用去加载一层(比如查找26的时候)。如果查找28的时候就要多加载一层。。
但是要注意,这里的每个块的大小只有16KB的大小,互联网上一条数据就占1KB。也就是说,在这个块之内,我其实可以存更加多的指针(也就是指向别的节点),但是数据块占了比较多的空间。这样子节点变少,层数增加,这样IO的路数就会增多,这样性能就会下降。
这样就演变出B+tree
二: B+tree
只有叶子节点才存数据,这个一个块就能存很多的数据,这样层数就减少了。也就是IO比较少了。性能就提升了。
但是有个问题,原来的(BTree)树,数据块存数据,这样查询不是更加快得吗?B+Tree只是叶子节点存数据,上面得层数(IO走完)才到叶子节点,这样不是更加慢得吗?
其实B+Tree到第3层这个级别,这个时候已经能处理2000W这个级别得数据!而且底层得数据(叶子节点)是有序得,更加容易取一个区间得数据。而且每个节点之前还有链表。。
三:啥是存储引擎
四:
myisam和innodb的区别
(1)myisam的引擎的特点
(2)innodb存储引擎的特点
注意:savepoint表示记录的保存点。。
(3)myisam和innodb的比较
(4)默认的存储引擎是innodb