2010-08-19 26 views
1
CREATE INDEX alias_pub_idx2 
    ON info.palias 
    USING btree 
    (publisher_id, player_id, pub_player_id); 

CREATE INDEX alias_pub_idx3 
    ON info.palias 
    USING btree 
    (player_id); 

第一包括三列;後者只包括一個。我認爲它們是多餘的 - 第一個btree索引就足夠了,但我對PostgreSQL索引方法並不熟悉。思考?PostgreSQL指數 - 是多餘的?

+0

這有效嗎?最後我聽說,PostgreSQL不支持覆蓋索引,這就是'alias_pub_idx2'。 – 2010-08-19 22:01:04

+0

這就是我最初想到的,OMG--但它們不覆蓋索引 - info.palias必須是schema.table語法。 – 2010-08-19 22:05:58

+1

是的,對不起,info.palias是schema.table .. – Wells 2010-08-19 22:06:18

回答

8

PostgreSQL多列索引是「排序」的,這意味着只有當player_idalias_pub_idx2中提到的第一列時,這纔是多餘的。

然而,這將是多餘的:

CREATE INDEX alias_pub_idx2 
    ON info.palias 
    USING btree 
    (publisher_id, player_id, pub_player_id); 

CREATE INDEX alias_pub_idx3 
    ON info.palias 
    USING btree 
    (publisher_id); /* first column of another index => waste of space */ 
+0

所以說如果player_id是更多連接的列(到目前爲止),它應該是索引中的第一列,或者有它自己的獨立指數? – Wells 2010-08-19 22:31:05

+0

@ Wells是的,沒錯。從文檔中:「當領先(最左邊的)列有限制時,索引是最有效的」 – KeatsPeeks 2010-08-19 22:46:16

+0

好;謝謝!我很感激。 – Wells 2010-08-19 23:09:24

0

無論指數時,其他多餘的 - 對一個info.palias查詢,查找特定player_ids將有利於在第一第二個索引,如果PUBLISHER_ID是不是也一個標準。

0

使用B樹

BTREE indexes are ordered,這就是爲什麼你的第二個指標是多餘的:第一列是相同的,可以在所有的查詢,其中player_id是一種條件下使用。