一尘不染

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

mysql

假定通过执行以下操作来更改MySQL表(ISAM)的默认顺序:

ALTER TABLE tablename ORDER BY columnname ASC;

从现在开始,假设我的查询中未指定“ ORDER BY”(即“ SELECT * FROM tablename WHERE … LIMIT
10;”),我是否可以 保证 按“ columnname ASC”的顺序从表中检索到记录?

我应该注意什么极端情况吗?

更新#1:非常 感谢Quassnoi,他正确地指出INSERT和DELETE弄乱了顺序。这使我想到以下额外的问题:

  • 那么更新呢?假设没有对表进行INSERT或DELETE操作,而仅对更新进行了操作-排序顺序是否完整?
  • 假设已完成INSERT和DELETE-如何再次“重建”排序,每天说一次(在这种特定情况下,该表每天仅更改一次,因此在进行更改后每天重新生成它应该仍然可以!)。REPAIR TABLE是否可以修复它,还是必须再次添加ALTER TABLE … ORDER BY?

阅读 1482

收藏
2020-05-17

共1个答案

一尘不染

文档

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

实际上,如果您SELECT ... ORDER BY向该表发出命令,则该选项ALTER TABLE不会浪费您的时间filesort,反而会使filesort速度更快。

对已排序的集合进行排序等同于浏览该集合以确保一切正常。

那么更新呢?假设没有对表进行INSERT或DELETE操作,而仅对更新进行了操作-排序顺序是否完整?

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

但是,如果我正在建造核电站或获得报酬的东西,我将不会依靠这种行为。

假设已完成INSERT和DELETE-
如何再次“重建”排序,每天说一次(在这种特定情况下,该表每天仅更改一次,因此在进行更改后每天重新生成它应该仍然可以!)。REPAIR
TABLE是否可以修复它,还是必须再次添加ALTER TABLE … ORDER BY?

您需要做ALTER TABLE ... ORDER BY

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

2020-05-17