1

我在PostgreSQL 8.1工作,我有3個元素並且沒有其他索引的複合主鍵的表: PRIMARY KEY(EL1,EL2,EL3)性能上選擇具有複合主鍵的元件

如果我做一個選擇操作像SELECT * FROM表WHERE EL1 IN(...),將操作考慮到主鍵包含EL1或者它會比較慢,因爲沒有指標,可以幫助的事實?

謝謝。

+0

有這個帖子一展身手。 http://stackoverflow.com/questions/11352056/postgresql-composite-primary-key –

+2

8.1,現在已經出了支持好幾年了。您應立即升級到支持的版本(理想情況下爲9.2) –

+0

升級到9.1現在不是一個選項,但我們正在考慮這個想法。謝謝。 – Cristian

回答

1

按照PostgreSQL documentation

一個多字段的B-tree索引可以與查詢條件 涉及索引中的列的任何子集可以使用,但是當有對約束指標是最 高效領先(最左邊) 列。確切的規則是,前導 列上的等式約束,加上第一列上的任何不等式約束,其中 不具有相等約束,將被用於限制 被掃描的索引的部分。

您還可以嘗試在查詢上運行解釋計劃以確定此行爲。

0

Postgres的 - 我知道的每一個SQL引擎 - 可以使用第一個或多個字段從多領域的指數。在你的情況,其中該索引是(EL1,EL2,EL3),它可以使用索引爲像「其中EL1 = x」或「其中EL1 = x和EL2 = Y」的查詢。

它不能使用索引,如果你不給EL1的值。就像「select ... where el2 = y」,索引就沒用了。