例如,我有表用户(id,用户名,电子邮件)。PostgreSQL表中的列顺序是否重要?
以下查询是否有区别? (也许性能,或其他任何东西)
SELECT id, username, email FROM users
和
SELECT id, email, username FROM users
一般来说,不列顺序此事创建PostgreSQL的表?
例如,我有表用户(id,用户名,电子邮件)。PostgreSQL表中的列顺序是否重要?
以下查询是否有区别? (也许性能,或其他任何东西)
SELECT id, username, email FROM users
和
SELECT id, email, username FROM users
一般来说,不列顺序此事创建PostgreSQL的表?
列的顺序在PostgreSQL中创建表并不重要,但它在PostgreSQL中创建索引事有时做。
PostgreSQL实现了具有基础唯一索引的主键。如果主键包含多个列,那么PostgreSQL将按照您声明的顺序创建具有列的基础索引。对该主键的部分的某些查询将能够使用该索引;有些不会。
此引述来自docs on multicolumn indexes。
阿多列B树索引可以与查询条件 涉及索引的列的任意子集被使用,但是当有上领先的(最左边) 列约束指数是最 高效。确切的规则是,在领先 列等式约束,加上,它 没有等式约束的第一列任何不等式约束,将用于限制 的部分被扫描的索引。上 这些列的右侧列的约束在索引中被检查,所以他们保存参观 表正确的,但他们不减少有 要扫描的索引的部分。例如,给定在(A,B,c)和一个查询 条件的指标,其中A = 5和B> = 42和c < 77,该指数将不得不 从与A = 5和第一条目扫描b = 42直到 最后一个条目的a = 5。c> = 77的索引条目将被跳过, ,但它们仍然需要被扫描。该指数可能在 原则上可用于那些对B和/或C的约束与 上没有约束的查询 - 但整个指数将不得不进行扫描,所以 在大多数情况下,计划者希望能有一个顺序表扫描过 使用索引。
谢谢你的回答。它只与主键有关吗?或者其他索引是否如此? – Teimuraz
对于具有多列的所有索引均为真。 –
http://dba.stackexchange.com/a/18728/67268 –
@RavinderReddy,PostgreSQL是不是有提及。 postgresql的这个答案是否正确? – Teimuraz
否...它适用于所有 –