0
点赞
收藏
分享

微信扫一扫

索引的本质

半秋L 2022-04-29 阅读 84

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类型比较的是整个数字的大小。以此类推。(联合主键不允许所有个字段都相等)

举报

相关推荐

0 条评论