0

这篇文章说:

如果您使用 XtraDB 在 Percona Server 上运行 Innodb 插件,您将受益于一个很棒的新功能 - 通过排序而不是通过插入来构建索引的能力

但是我找不到任何有关此的信息。我希望能够重新组织表的物理布局方式,类似于 Postgre CLUSTER 命令或 MyISAM “alter table ... order by”。例如,表“posts”有数百万行以随机插入顺序排列,大多数查询使用“where userid =”,我希望该表具有属于一个用户的行,这些行在磁盘附近物理分离,因此常见查询需要低 IO。XtraDB 可以吗?

4

1 回答 1

0

关于博文的澄清

您基本上正在查看的功能是fast index creation. 此功能加快了对 InnoDB 表的二级索引的创建,但它仅在非常特定的情况下使用。例如,该功能未使用 while OPTIMIZE TABLE,因此可以通过先删除索引,然后运行OPTIMIZE TABLE然后重新创建索引来显着加快速度fast index creation(关于这是您链接的帖子)。

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

关于你的问题

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

这是不可能的。InnoDB 行基于聚集索引(本质上是主键)保存在页面中。行/页的顺序可能是混乱OPTIMIZE TABLE的,InnoDB 表可以做到这一点。使用此命令,表实际上是按主键顺序重新创建的。这允许在相同或相邻页面上收集主键本地行。

这就是你可以强制 InnoDB 做的所有事情。您可以阅读有关 clustered index的手册,手册中的另一页明确回答这是不可能的(“ORDER BY 对于 InnoDB 表没有意义,因为 InnoDB 总是根据聚集索引对表行进行排序。” dba.stackexchange 上的相同问题,您可能会感兴趣的答案

于 2014-03-31T00:15:07.647 回答