mysql 索引相关知识总结:

索引是帮助mysql高效获取数据的排好序的数据结构,索引是存在硬盘上的 。

每一次查询mysql 就是一次磁盘io.

红黑树其实是二叉平衡树,如果数据足够大的话,那么红黑树的层数(树的度)会很深。这也是之所以不被数据库使用的原因。

BTREE 其实是多叉平衡树(一个节点存储了多个节点(多个索引))。


mysql 索引相关知识总结:_第1张图片

mysql使用的索引其实是 B+Tree(BTree的变种树)。B+Tree一般为三层到五层之间。

B+Tree:叶子节点存储数据,非叶子节点存储数据的索引值,每个叶子节点之间通过箭头(指针)相连接。

为什么B+Tree叶子节点存储数据?

cpu每次都是从硬盘数据读入内存,磁盘的最小单元是 页。一页默认存储4K,每次读取只能取整页的。

msyql每个节点默认存储16K的数据。(show GLOBAL STATUS LIKE 'Innodb_page_size';这条sql可以查询大小)。



mysql 索引相关知识总结:_第2张图片


mysql 索引相关知识总结:_第3张图片

mysam存储引擎:

磁盘上对应三个文件(frm,myd,myi)结尾的。frm 对应的是表结构,myd存储数据,myi存储索引。

Innodb存储引擎:

磁盘上对应两个文件(frm,ibd)结尾的。frm对应表结构,ibd存储指针和数据。

innodb的特性:ibd本身就是一个B+Tree结构的文件。

为什么innodb建议必须有主键?

表结构决定了必须有,ibd文件。之所以没有主键也能建表成功,是因为msyql默认会建一个字段当做主键。

为什么主键建议用整形且自增?

uuid作为主键,第一占内存,第二值不连续,可能导致B+Tree分层,第三比较,整形快。

联合索引底层存储结构:(最左前缀)

叶子节点其实冗余了索引地址,根据B+Tree树的特性都是从左到右递增的。所以最左查找是根据


mysql 索引相关知识总结:_第4张图片

聚集索引:叶子节点包含了完整的数据记录。(主键索引就是据聚集索引)

非聚集索引:就是数据元素和索引不在同一个文件中存储的索引。(mysam:的两个文件)。(待确定)

你可能感兴趣的:(mysql 索引相关知识总结:)