我们MYSQL服务器是在内存中的,所以所有的操作也是内存级的,索引也是如此
我们要提高算法的效率:首先要用一个好的数据存储结构储存数据,然后结构决定算法
所以——索引的本质就是一种提高算法效率组织的数据结构
缩印的主要价值体现在海量数据的检索(查询)速度
一个表中有成万条数据,输入直接查找某条的话需要花费的时间就很长,而且这还只是本机一个人操作,如果把MySQL服务器放入公网,让很多用户来查询的话,所花费的时间将更长
给要查找的字段加上索引后(构建数据结构):
索引是如何实现的呢?
我们知道数据库中的表就是文件,文件是存在磁盘中的,Mysq中的CURD操作都是需要计算然后找到对应的数据的,计算一定用到CPU,所以一定是要把数据库文件中的数据拿到内存中的。如果只是操作系统的文件系统对磁盘文件IO,那么每次就只能IO 4KB的数据,这样做在MYSQL层面看来IO效率就很低,所以在MYSQL中也有自己的缓冲内存,他向系统缓冲区每次拿取的数据是16KB,每次拿取的16KB就是一个page.——目的:为何更高的效率,一定要尽可能的减少系统和磁盘IO的次数
但是只是这样也不能快速提高查找效率,所以针对每个page数据块我们都要组织管理起来,然后所有的page用一个数据结构管理起来,然后根据这个数据结果,决定出他的高效查找效率:
目录页**B+**树的思想
为何不用其他数据结构:
链表:线性查找慢
搜索二叉树:如果插入的树是有序的,那么就退化为线性了
AVL&&红黑树:只有二哥叉,就意味着树的高度要更高,系统与硬盘更多的IO Page交互
hash:也有支持的,叶子不是连续的,但在范围查找上不具备
B树:除了叶子节点外,其他节点也会储存数据,更高更多的page