mysql索引优化-MyISAM&InnoDB

2023-12-26 14:50:35

MyISAM:

- 索引文件和数据文件是分离的(非聚集)

frm:表结构

MYD:数据

MYI:索引

前置条件:Col1为索引,mysql会以B+树的数据结构将Col1组织成叶子节点,放置在MYI文件中,数据行存放在MYD文件中

查找Col1=30过程(结合:mysql优化-索引-CSDN博客- 当需要查找col=30的值过程):在ram中从根节点查找(去到MYI文件中),找到30后,拿到叶子节点的Data元素(存放索引所在行的磁盘文件地址:0xF3),去到MYD文件定位到具体的数据行

InnoDB:

- 索引实现(聚集)

- 表数据文件本身就是按B+Tree组织的一个索引结构文件

frm:表结构

ibd:数据和索引放在一起

- 聚集索引-叶节点包含了完整的数据记录

- 为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?

1)因为表数据文件本身按B+树组织,而B+树要求从左往右递增,通过自增主键便于组织B+树

2)如果没有建,mysql会选择【所有元素都不相同的一列数据】自动创建主键

3)如果没有【所有元素不相同的一列数据】,mysql会自动创建隐藏列,类似lowid

4)以上,mysql的资源是很宝贵的,这种简单的事情应该自己做,不该交给mysql,减少mysql的工作

5)为什么是整型

5.1)【整型比大小】的效率要高于【字符串比大小(转ASCII来比大小)】

5.2)前者占用的空间也更小(数据和索引都是存在磁盘(SSD),性能比电脑的SSD要高,也更贵)

- 聚集索引和非聚集索引那种更快?

从结构来说,聚集索引更快,可以直接查找到数据行

- 为什么非主键索引结构叶子节点存储的是主键值?

(一致性和节省存储空间)

联合索引的底层存储结构长什么样?

文章来源:https://blog.csdn.net/u014563917/article/details/135210926
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。