mysql是否会将整个ibd文件加载到内存中,并在向innodb插入新行时处理内存中的所有内容?
数据大小可能相当大,因此主索引可能不会加载到内存中。
二级索引只链接到主索引,这意味着二级索引可能不是很大。那么,为什么不将所有的辅助索引加载到内存中,并在内存中进行更新,除非需要刷新到磁盘。
如果二级索引可以加载到内存中,为什么必须使用B树?
发布于 2022-11-09 18:39:49
不,只有.ibd文件的一个子集被加载到内存中。加载的页面是由您运行的查询检查的页面。在运行其他查询时,这可能会导致最近使用最少的页面被逐出。
这里都描述了这一点:https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html
如果查询不使用这些索引,或者只使用索引的一部分,则没有必要将所有辅助索引加载到内存中。
不需要将BTREE指定为InnoDB表的索引类型。默认情况下,InnoDB索引是BTREE。InnoDB不支持散列索引类型,因此不需要指定BTREE。InnoDB支持的其他索引类型是全文或空间索引,但仅此而已。
https://dba.stackexchange.com/questions/319405
复制相似问题