首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库文件中的索引和行放置

问数据库文件中的索引和行放置
EN

Database Administration用户
提问于 2014-12-07 14:39:00
回答 1查看 369关注 0票数 1

存储在物理数据库文件或物理文件页中的索引和数据表在哪里:

  • 同一物理页面中的不同表中是否有不同的行?
  • MySQL是如何决定在某个页面中放置一行的?
  • 那么索引的放置也是这样吗?

对于网络数据库(IDMSX数据库),我对此略知一二,直接计算出在物理页面上的位置(如果可能的话,其他记录就存储在附近)。

EN

回答 1

Database Administration用户

回答已采纳

发布于 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+树算法中。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/84545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档