2015-12-24 41 views
3

例如,我有表用戶(id,用戶名,電子郵件)。PostgreSQL表中的列順序是否重要?

以下查詢是否有區別? (也許性能,或其他任何東西)

SELECT id, username, email FROM users 

SELECT id, email, username FROM users 

一般來說,不列順序此事創建PostgreSQL的表?

+0

http://dba.stackexchange.com/a/18728/67268 –

+0

@RavinderReddy,PostgreSQL是不是有提及。 postgresql的這個答案是否正確? – Teimuraz

+0

否...它適用於所有 –

回答

3

列的順序在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的約束與 上沒有約束的查詢 - 但整個指數將不得不進行掃描,所以 在大多數情況下,計劃者希望能有一個順序表掃描過 使用索引。

+0

謝謝你的回答。它只與主鍵有關嗎?或者其他索引是否如此? – Teimuraz

+0

對於具有多列的所有索引均爲真。 –

相關問題