MySQL中的默认排序顺序(ALTER TABLE ... ORDER BY ...;)

kno*_*orv 17 mysql sorting alter-table

假设通过执行以下命令来更改MySQL表(ISAM)的默认顺序:

ALTER TABLE tablename ORDER BY columnname ASC;
Run Code Online (Sandbox Code Playgroud)

从现在开始,我保证以"columnname ASC"的顺序获取从表中检索到的记录,假设在我的查询中没有指定"ORDER BY"(即"SELECT*FROM tablename WHERE ... LIMIT 10;")?

我应该注意哪些角落?

更新#1:非常感谢Quassnoi,他正确地指出INSERT和DELETE会扰乱排序.这引出了以下额外问题:

  • UPDATE怎么样?假设没有对表进行INSERT或DELETE,只进行更新 - 排序顺序是否完整?
  • 假设INSERT和DELETE已经完成 - 我如何再次"重建"排序,比如说每天一次(在这种特定情况下,表每天只会更改,因此在更改完成后每天重建它应该仍然可以!).REPAIR TABLE是否修复它,或者必须再次添加ALTER TABLE ... ORDER BY?

Qua*_*noi 24

来自文档:

请注意,插入和删除后,表不会按此顺序保留

实际上,如果你发给SELECT ... ORDER BY这个表,选项ALTER TABLE不会让你失望filesort,反而会filesort更快.

对已经排序的集进行排序等同于浏览此集以确保一切正常.

UPDATE怎么样?假设没有对表进行INSERT或DELETE,只进行更新 - 排序顺序是否完整?

如果您的表不包含任何动态字段(例如VARCHAR'BLOB'),则更新时很可能 MyISAM不会移动它.

不过,我不会依赖这种行为,如果我正在建造一座核电站或者我得到报酬的东西.

假设INSERT和DELETE已经完成 - 我如何再次"重建"排序,比如说每天一次(在这种特定情况下,表每天只会更改,因此在更改完成后每天重建它应该仍然可以!).REPAIR TABLE是否修复它,或者必须再次添加ALTER TABLE ... ORDER BY?

你需要做的ALTER TABLE ... ORDER BY.

REPAIR 只修复损坏的表的物理结构.


小智 5

对列进行物理排序可以节省 IO 负载。这是在高级系统中用于加快查询时间的完全合法的方法。您只需要时不时地重新组织数据,使其保持集群状态。仅仅因为有些人没有听说过它并不意味着它不存在。- 25 年高级 DB 设计资深人士。