1、索引的底层本质是一个排好序的数据结构
2、索引的存储方式key-value
a、最早是二叉树方式 key是存储的值,value是磁盘文件地址 。
b、之后是红黑树(二叉平衡树)
c、之后是B树。
d、在之后是B+树。
3、B树和B+树的区别:
a、B+树多了区间指针,在查询数据范围的时候可以通过区间指针直接把区间的数据拿出来。而B树没有区间指针,只能拿到与之相邻的数据,多次查找,如果范围较大,效率就会很低。
b、B+树非叶子节点不存储data,只存储索引,叶子节点包含所有的索引数据
4、在内存中做数据比对,要比在磁盘空间中做数据比对快得多。
5、MYISAM存储引擎和INnodb存储引擎
a、frm框架文件(表结构文件) MYD存的是data数据 MYI存储的是索引数据
b、frm框架文件(表结构文件) ibd存的是data数据和索引数据
10、MYISAM查询流程:
正常执行一个sql查询语句的时候,首先会判断查询条件中哪个字段是带有索引的,优先会查询带有索引字段的条件,因为表里存储的数据就是索引的冗余,直接判断查询条件中的数据在索引表MYI对应的磁盘文件地址指向,然后去MYD数据表中找到对应磁盘文件指向的数据。
11、INNODB查询流程:
INNodb和MYISAM存储引擎差距的是INNODB的表数据和索引数据都存放在一起,所以B+树的叶子节点不仅仅存放了索引文件,同时也存放了data数据(所在行的所有的其他列的数据)。
12、聚簇索引和非聚簇索引:
聚簇索引指的是叶子节点包含了完整的数据记录,INnodb的主键索引就是聚簇索引。非聚簇索引指的是索引文件和数据文件是分离的,MYISAM的主键索引就是非聚簇索引。
13、建议Innodb表必须建主键,并且推荐使用整形的自增主键。(方便比大小,且节省资源空间)(相对UUID)
14、索引:HASH结构:查找单个可能效率更高,但是不支持范围查询,hash冲突的时候查找链表效率就会慢,但是有hash冲突处理方式rehash
15、联合索引
16、联合索引的有序是怎么做到的?
索引最左前缀原则,首先比较第一个字段,如果第一个字段是String,那么比较第一个字符,B>H,若果第一个字段的第一个字符一致,那么比较第二个字段,int类型比较的是整个数字的大小。以此类推。(联合主键不允许所有个字段都相等)