例如,我有表用户(id,用户名,电子邮件)。
以下查询之间有什么区别吗? (也许是表演,或其他任何事情)
SELECT id, username, email FROM users
和
SELECT id, email, username FROM users
通常,列顺序是否会影响创建PostgreSQL表?
答案 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个字节的类型,则顺序无关紧要。