PostgreSQL表中的列顺序是否重要?

时间:2015-12-24 11:55:16

标签: postgresql

例如,我有表用户(id,用户名,电子邮件)。

以下查询之间有什么区别吗? (也许是表演,或其他任何事情)

SELECT id, username, email FROM users

SELECT id, email, username FROM users

通常,列顺序是否会影响创建PostgreSQL表?

2 个答案:

答案 0 :(得分:6)

在PostgreSQL中创建表时,列的顺序并不重要,但在PostgreSQL中创建索引时,它确实很重要。

PostgreSQL使用底层唯一索引实现主键。如果主键包含多个列,则PostgreSQL按照您声明的顺序创建具有列的基础索引。对该主键的 part 的一些查询将能够使用该索引;有些人不会。

此引用来自docs on multicolumn indexes

  

多列B树索引可以与查询条件一起使用   涉及索引列的任何子集,但索引最多   在领先(最左边)有限制时有效   列。确切的规则是对领导的平等约束   列,以及第一列上的任何不等式约束   没有等式约束,将用于限制部分   扫描的索引。对右边列的约束   这些列在索引中被检查,因此它们可以保存对   表适当,但它们不会减少索引的部分   被扫描。例如,给定(a,b,c)和查询的索引   条件WHERE = 5且b> = 42且c <1。 77,指数必须   从第一个条目扫描a = 5和b = 42向上通过   a = 5的最后一个条目。将跳过c> = 77的索引条目,   但他们仍然需要扫描。这个指数可以在   原则用于对b和/或c有约束的查询   对a没有约束 - 但是必须扫描整个索引,所以   在大多数情况下,规划人员更喜欢顺序表扫描   使用索引。

答案 1 :(得分:0)

这很重要...有时会很重要。类似data structure alignment。如果您开始使用小于4个字节的混合类型(smallint,char(1)等),则如果对它们进行交织,则表可能会变大。如果您确实使用了至少4个字节的类型,则顺序无关紧要。

https://www.2ndquadrant.com/en/blog/on-rocks-and-sand/