这篇文章说:
如果你在Percona服务器上运行Innodb插件和XtraDB,你会得到 出色的新功能的好处 – 能够按排序构建索引 而不是通过插入
但是我找不到任何有关此的信息。我希望能够重新组织表格的物理布局方式,类似于Postgre CLUSTER命令或MyISAM"更改表...排序方式"。例如,表"posts"有数百万行的随机插入顺序,大多数查询使用"where userid = ",我希望表在磁盘上具有属于一个用户的行,以便常见查询需要低IO。XtraDB可以吗?
关于博客文章的说明
您基本上正在查看的功能是 fast index creation
.此功能加快了InnoDB表二级索引的创建速度,但它仅在非常特殊的情况下使用。例如,OPTIMIZE TABLE
时不使用该功能,因此可以通过先删除索引,然后运行OPTIMIZE TABLE
然后使用fast index creation
重新创建索引来显着加快速度(关于这是您链接的帖子)。
案例的某种自动化,可以通过像上面一样手动使用此功能来改进,作为名为 expand_fast_index_creation
的系统变量添加到 Percona Server 中。如果激活,服务器不仅应该在非常特殊的情况下使用快速索引创建,而且在所有情况下它可能会有所帮助,例如OPTIMIZE TABLE
- 链接博客文章中提到的问题。
关于您的问题
您的问题实际上是是否可以以自定义顺序保存InnoDB表,以通过利用磁盘上的局部性来加快特定类型的查询。
这是不可能的。InnoDB行根据聚簇索引(本质上是主键)保存在页面中。行/页可能按混乱的顺序排列,为此可以OPTIMIZE TABLE
InnoDB表。使用此命令,实际上按主键顺序重新创建表。这允许在相同或相邻的页面上收集主键本地行。
这就是您可以强迫InnoDB执行的所有操作。您可以阅读有关聚簇索引的手册,手册中的另一页作为这是不可能的明确答案("ORDER BY对InnoDB表没有意义,因为InnoDB总是根据聚簇索引对表行进行排序"),以及dba.stackexchange上的相同问题,您可能会感兴趣。