MySQL中的默认排序(ALTER TABLE…ORDER BY…;)
假定通过执行以下操作来更改MySQL表(ISAM)的默认顺序:
ALTER TABLE tablename ORDER BY columnname ASC;
从现在开始,假设我的查询中未指定“ ORDER BY”(即“ SELECT * FROM tablename WHERE … LIMIT
10;”),我是否可以 按“ columnname ASC”的顺序从表中检索到记录?
我应该注意什么极端情况吗?
感谢Quassnoi,他正确地指出INSERT和DELETE弄乱了顺序。这使我想到以下额外的问题:
- 那么更新呢?假设没有对表进行INSERT或DELETE操作,而仅对更新进行了操作-排序顺序是否完整?
- 假设已完成INSERT和DELETE-如何再次“重建”排序,每天说一次(在这种特定情况下,该表每天仅更改一次,因此在进行更改后每天重新生成它应该仍然可以!)。REPAIR TABLE是否可以修复它,还是必须再次添加ALTER TABLE … ORDER BY?
回答:
从 :
请注意,插入和删除后,表不会按此顺序保留
实际上,如果您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
只是修复损坏表的物理结构。
以上是 MySQL中的默认排序(ALTER TABLE…ORDER BY…;) 的全部内容, 来源链接: utcz.com/qa/434517.html