优化表做什么,或者如何正确优化磁盘上的PK

时间:2013-11-05 15:34:18

标签: mysql optimization primary-key innodb

我的印象是OPTIMIZE TABLE修复了碎片。所以,如果在我做之前

select * from t -- (no order by, no nothing) 

我会得到磁盘上记录的顺序。 在进行优化并再次运行此查询后,结果将由PK命令 我只是在我的桌子上试过它,没有任何改变,我仍然得到任意记录顺序。

我将所有表存储在一个文件中。我正在使用InnoDB。 MySQL 5.5 我错过了什么,我应该以其他方式定义PK吗?

1 个答案:

答案 0 :(得分:1)

如果没有order by声明,您将无法保证订单。

你的假设

  

如果我之前选择*从t(没有订单,没有什么)我会   获取磁盘上记录的顺序

错误

数据库如何决定检索记录并在屏幕上显示它们(或者您正在查看它们的任何内容)完全取决于数据库的内部实现。在过去,可能是磁盘顺序,但唯一的方法是检查数据库(在您的情况下是MYSQL)是否在其文档中提到了有关它的任何内容。

我怀疑他们会不会因为那时人们会依赖这种排序而他们无法在不破坏过去的情况下改进他们的记录检索算法。

编辑:

至于优化表,请尝试使用能够反映您正在查找的查询结果的索引。

编辑2:

另一个想法是,您刚才描述的情况是一个经典的缓存问题。因为数据库已经将结果集存储在原始奇数排序的某处,所以在缓存的数据集不再被缓存之前,优化不会显示重新排序。你如何刷新缓存有点超出我的知识。