数据库索引的本质是空间换时间的解决办法,就是面试时经常问的数据结构排序等的具体应用。
索引就是在需要的字段另建了一张查询表。
其中查询表的数据结构就是B树
B树是一种应用到文件操作系统和数据库索引的数据结构。
原因是因为计机内存读取和磁盘IO的机制导致了,
内存读取很快,磁盘IO灰常费时间(寻道时间,磁头转动时间),有个计算机原则就是磁盘上的某个数据被读取,则相邻数据的数据也会被利用到。
所以磁盘有了数据块的概念,一个磁盘块4k,一次IO的读取一个磁盘块。
在上述的背景下,一个B树的节点就有一个磁盘块大小,可以存4k的数据和指针。如图所示,真实的例子一个节点会有很多数据:
真实的数据存在叶子节点上,3 5 9 10 13 15 28 29 36 60 75 79 90 99
这样查找28的过程就是
1.加载根节点,一次磁盘IO,二分查找17 35发现在两者之间,锁定p2指针,
2.加载模块3,一次磁盘IO,二分查找26 39发现在两者之间,锁定模块3p指针,
3加载模块8,一次磁盘IO,二分查找28 29,找到28
一共三次磁盘IO,3次二分查找。
如果采用平衡二叉树的话深度会大很多,磁盘的IO会很多。一次磁盘IO的时间是8ms左右,只要耗费在磁盘寻道上。
所以暂时得到的结论就是:
索引的建立可以大幅度提高查询效率
删除更新数据需要更新维护索引,这个过程就是B树的删除跟新后的自平衡过程。
后续补上根据这个背景,什么时候建索引,怎么建效率会高