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会扰乱排序.这引出了以下额外问题:
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 设计资深人士。
| 归档时间: |
|
| 查看次数: |
29496 次 |
| 最近记录: |