我知道你可以用 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 开头的引用。这完全否定了我上面列出的效果。因此对于最近的数据库,列顺序不再有任何影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)