存储在物理数据库文件或物理文件页中的索引和数据表在哪里:
对于网络数据库(IDMSX数据库),我对此略知一二,直接计算出在物理页面上的位置(如果可能的话,其他记录就存储在附近)。
发布于 2014-12-07 15:23:40
MySQL存储数据的方式取决于存储引擎。页面的概念存在于InnoDB中,而在MyISAM中存在块。在InnoDB中,页面是固定的16k,而MyISAM中的块是不同的大小,这取决于块的类型和其中记录的大小。
InnoDB将表存储在他们称为索引的B+树数据结构中。表本身(包含所有字段值的记录)存储在索引主目录中。任何辅助键也存储在它的B+tree索引中。表的所有索引都存储在相应的.ibd文件中,如果innodb_file_per_table是ON,则存储在ibdata1中。
MyISAM是不同的。表的记录以块形式存储在.MYD文件中。任何新记录都会追加到MYD文件的末尾。MYD文件不是树-只是一组块。如果表中有主键或次键,则将它们保存在B+树索引中,这些索引存储在.MYI文件中。(我不记得它是否正是B+树,但肯定是B树)。
同一物理页面中的不同表中是否有不同的行?
不是的。InnoDB中的页面属于某些索引。页面不能在索引之间共享。MyISAM块也是如此。
MySQL是如何决定在某个页面中放置一行的?
对于MyISAM,它只是将记录添加到MYD文件的末尾。对MYI中的索引进行相应的树算法重构。对于InnoDB,新记录被插入到B+树中,因此同样地,也插入到B+树算法中。
https://dba.stackexchange.com/questions/84545
复制相似问题