mysql – 有什么理由担心表中的列顺序吗?

我知道你可以ALTER的列顺序在MySQL与FIRST和AFTER,但为什么你想打扰?由于良好的查询在插入数据时显式地命名列,是否真的有理由关心表中的列是什么顺序?
列顺序对我调优的一些数据库有很大的性能影响,跨越了Sql Server,Oracle和MySQL。这个帖子有good rules of thumb

>主键列
>接下来是外键列。
>接下来经常搜索的列
>以后经常更新列
>可空的列最后。
>在经常使用的可空列之后最少使用可空列

性能差异的一个例子是索引查找。数据库引擎根据索引中的一些条件查找一行,并返回一个行地址。现在说你正在寻找SomeValue,它在这个表:

 SomeId int,
 SomeString varchar(100),
 SomeValue int

引擎必须猜测SomeValue开始在哪里,因为SomeString有一个未知的长度。但是,如果您将订单更改为:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

现在引擎知道SomeValue可以在行的开始后4个字节。所以列顺序可以有相当大的性能影响。

编辑:Sql Server 2005在行的开头存储固定长度字段。每一行都有对varchar的开始的引用。这完全否定了我上面列出的效果。因此,对于最近的数据库,列顺序不再有任何影响。

http://stackoverflow.com/questions/894522/is-there-any-reason-to-worry-about-the-column-order-in-a-table

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:mysql – 有什么理由担心表中的列顺序吗?