目录
一、什么是索引?
二、MySQL索引结构分析【MySQL底层采用的是B+Tree】
1、为什么不使用二叉树?
2、为什么不使用红黑树?
3、为什么不使用Hash?
4、B+Tree与B-Tree的区别?
三、MySQL数据库的表结构、索引、数据
1、MyISAM和InnoDB区别?
2、MySQL表的存储引擎为MyISAM:
3、MyISAM存储引擎的查找过程:
4、MySQL表的存储引擎为InnoDB:
5、InnoDB存储引擎的查找过程:
6、聚簇索引与非聚簇索引的区别?
一、什么是索引?
索引就是把无序的数据排列有序,便于查找。类似于字典的目录(按照字母查找、偏旁查找。比作:不同的索引类型)
二、MySQL索引结构分析【MySQL底层采用的是B+Tree】
1、为什么不使用二叉树?
比如:一组自增的数据(1、2、3、4、5、6、7),二叉树会形成一个链表的形式,比如查找5,就需要进行5次I/O,并不会提高查询效率。
2、为什么不使用红黑树?
红黑树就是比二叉树多了平衡,红黑树有称:二叉平衡树。 查询效率稍微比二叉树快。
3、为什么不使用Hash?
等值查找快,但无法进行范围查询。select * from student where age > 10;
4、B+Tree与B-Tree的区别?
1、B+Tree的叶子节点之间是有指针连接的,B-Tree没有。
2、B+Tree的非叶子节点只存储索引,不存储数据;叶子节点存储索引和数据。
3、B+Tree的节点有冗余的索引值,B+Tree支持随机检索和顺序检索;B-Tree只适合随机检索。
三、MySQL数据库的表结构、索引、数据
常见的MySQL存储引擎有MyISAM和InnoDB(更多可以用SHOW ENGINES命令查看)。
1、MyISAM和InnoDB区别?
1、InnoDB支持事务、提供了行级锁(支持表锁,默认是行锁)和外键的约束。
2、MyISAM不支持事务、行锁、外键。
3、MyISAM的表结构(存放frm文件中)、索引(存放MYI文件中)、数据(存放MYD文件中);InnoDB表结构(存放frm文件中)、索引和数据(存放idb文件中)。
2、MySQL表的存储引擎为MyISAM:
1、frm文件存放表结构;
2、MYD文件存放表中的数据;
3、MYI文件存放表的索引。
3、MyISAM存储引擎的查找过程:
1、将B+Tree的索引节点load到内存,进行比较查找;
2、最后在叶子节点找到对应的索引值,而索引的data存放的是:索引所在数据行的磁盘文件指针;根据该指针,把数据从数据表中查询出来即可。(该过程查找了2个文件,一个MYI文件,一个MYD文件;相比InnoDB多了一个磁盘IO。)
4、MySQL表的存储引擎为InnoDB:
1、frm文件存储表结构;
2、idb文件存储索引和数据。
5、InnoDB存储引擎的查找过程:
1、将B+Tree的索引节点load到内存,进行比较查找;
2、最后在树的叶子节点找到与之对应的索引值,而索引的data存放的是:索引对应行的数据;(该过程只查找了1个文件,ibd文件,相比MyISAM存储引擎少了一次磁盘IO)。
6、聚簇索引与非聚簇索引的区别?
1、InnoDB的主键索引就是聚集索引,叶子节点包含了完整的数据记录,数据和索引存储在同一个文件(聚簇索引:将数据和索引放在一起,找到索引也就找到了数据。)
2、MyISAM的主键索引就是非聚集索引,索引存储在MYI文件,数据存储在MYD文件。