索引的本质:帮助MySQL高效获取数据的排好序的数据结构。
**不建索引需要多次磁盘IO。
将根节点索引一次加载到内存中做比较,即:15,56,77同时加载到内存中,完成一次磁盘IO。MySQL规定一次加载大小为16k。
MySQL索引底层数据结构为B+树:
存储引擎是作用于数据表的:
myisam:三个文件:(1)frm(2)MYD: data,存储数据(3)MYI:index,存储索引
innodb:(1)frm:描述表的框架结构 (2)ibd:存储数据与索引。
注意与myisam叶子节点的区别
myisam查到节点后,需要根据节点的地址值再去数据文件获取记录的值;而innodb查到节点后,由于该节点存储着记录的值,所以可以直接获取。
为什么必须有主键,整型自增?
将索引块加载到内存中比较时,使用整型比较快。如果使用UUID,其为字符串比较起来浪费时间。如果没有设置主键,数据库会选一个无重复的列作为主键,如果没有,数据库会自己创建
B+树为什么要加指针?
实现范围查找:加入要查找大于20的元素,先定位20,然后利用指针可以获取所以有大于20的元素
联合索引的底层数据结构: