2012-07-05 1022 views
22

在MySQL中,當我創建一個複合主鍵時,比方說列X, Y, Z,那麼所有三列自動成爲索引。 Postgres也一樣嗎?PostgreSQL複合主鍵

+2

你的意思是MySQL創建**三** *索引*?聽起來非常奇怪 – 2012-07-05 21:19:32

回答

52

如果您創建複合主鍵(x, y, z),PostgreSQL在(x, y, z)的一個UNIQUE多列索引的幫助下實現此功能。此外,所有三列必須是NOT NULL,當然這是PRIMARY KEYUNIQUE INDEX之間的主要區別。

除了對你的數據有明顯的限制,該multi-column index也有查詢超過三個個人指標上xyz表現有點不同的效果。

我們對最近的這個問題進行了非常徹底的討論on dba.SE in this related question。通過示例,基準,討論和展望index-only scans in version 9.2即將發佈的功能。

特別地,上(x, y, z)主鍵將加快與條件的查詢上x(x,y)(x,y,z)最佳。它也將有助於查詢y,z,(y,z)(x,z),但程度較低。

如果您需要加快對後者組合的查詢,可能需要創建一個或多個附加索引。

2
Yes

PostgreSQL自動當唯一約束或主鍵爲表中定義的唯一索引。該索引涵蓋組成主鍵或唯一約束的列(如果適用,則爲多列索引),並且是實施約束的機制。

+1

我認爲問題是每列是否有自己的索引。 – 2012-07-05 20:54:07

+0

同意。問題不是自動創建1個多列索引,而是創建3個單列索引。答案是否定的。您的答案仍然相關,因爲它在編輯課程之後提供補充信息。實際上,@ dondi-michael-stroma的答案比原始請求者選擇的答案更有意義。 – Chucky 2014-09-23 06:27:43

1

不,你會得到一個三列主鍵索引。