Mysql Xtradb按排序而不是通过插入来构建索引

时间:2014-03-30 14:18:46

标签: mysql io innodb xtradb

This post说:

  

如果您使用XtraDB在Percona Server上运行Innodb插件,则可以获得   一个伟大的新功能的好处 - 通过排序构建索引的能力   而不是通过插入

但是我找不到任何关于此的信息。我希望能够重新组织一个表的物理布局方式,类似于Postgre CLUSTER命令,或MyISAM" alter table ... order by"。例如表"帖子"有随机插入顺序的数百万行,大多数查询使用"其中userid ="并且我希望表在磁盘上具有属于一个物理上分开的用户的行,因此常见查询需要低IO。是否可以使用XtraDB?

1 个答案:

答案 0 :(得分:0)

关于博客文章的澄清

您基本上关注的功能是fast index creation。此功能可以加快创建二级索引到InnoDB表,但它仅用于非常特殊的情况。例如,在OPTIMIZE TABLE时不使用该功能,因此可以通过先删除索引来显着提高速度,然后运行OPTIMIZE TABLE,然后使用fast index creation重新创建索引(大约是expand_fast_index_creation {3}})。

案例的某种自动化,可以通过像上面手动使用此功能the post you linked作为名为OPTIMIZE TABLE的系统变量来改进。如果激活,服务器应该不仅在特定情况下使用快速索引创建,而且在所有情况下都可能有帮助,例如OPTIMIZE TABLE - 链接博客文章中提到的问题。

关于你的问题

您的问题实际上是否可以通过利用磁盘上的位置以自定义顺序保存InnoDB表以加速特定类型的查询。

这是不可能的。 InnoDB行基于聚集索引(基本上是主键)保存在页面中。行/页可能处于混乱排序,其中一个可以{{1}} InnoDB表。使用此命令,表实际上是以主键顺序重新创建的。这允许在相同或相邻的页面上收集主键本地行。

这就是你可以迫使InnoDB做的一切。您可以阅读was added to Percona Server,手册中的另一页the manual about clustered indexdefinite answer that this is not possible ("ORDER BY does not make sense for InnoDB tables because InnoDB always orders table rows according to the clustered index.")