一尘不染

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

mysql

我知道您可以使用FIRST和AFTER更改MySQL中的列顺序,但是为什么要麻烦呢?由于良好的查询会在插入数据时显式命名列,因此确实有任何理由要关心列在表中的顺序吗?


阅读 187

收藏
2020-05-17

共1个答案

一尘不染

列顺序对我已调优的某些数据库(包括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开头的引用。这完全抵消了我上面列出的效果。因此,对于最近的数据库,列顺序不再有任何影响。

2020-05-17