我知道您可以使用FIRST和AFTER更改MySQL中的列顺序,但是为什么要麻烦呢?由于良好的查询会在插入数据时显式命名列,因此确实有任何理由要关心列在表中的顺序吗?
列顺序对我已调优的某些数据库(包括Sql Server,Oracle和MySQL)产生了很大的性能影响。这篇文章有很好的经验法则:
性能差异的一个示例是索引查找。数据库引擎根据索引中的某些条件查找行,然后获取行地址。现在说您正在寻找SomeValue,它在此表中:
SomeId int, SomeString varchar(100), SomeValue int
引擎必须猜测SomeValue从哪里开始,因为SomeString的长度未知。但是,如果将顺序更改为:
SomeId int, SomeValue int, SomeString varchar(100)
现在,引擎知道可以在行开始后的4个字节处找到SomeValue。因此,列顺序可能会对性能产生重大影响。
编辑:Sql Server 2005在行的开头存储固定长度的字段。并且每一行都有对varchar开头的引用。这完全抵消了我上面列出的效果。因此,对于最近的数据库,列顺序不再有任何影响。