2013-07-30 36 views
0

我有一個標準表是否禁用的觸發也將禁用索引暫時

Column |   Type   |      Modifiers      
--------+------------------------+---------------------------------------------------- 
id  | integer    | not null default nextval('users_id_seq'::regclass) 
name | character varying(255) | 
email | character varying(255) | 
active | boolean    | 
Indexes: 
    "users_pkey" PRIMARY KEY, btree (id) 

下一頁如果我執行

ALTER TABLE "users" DISABLE TRIGGER ALL 

然後當我執行

SELECT "users".* FROM "users" WHERE "users"."id" = 1 

應的指數使用如果我檢查解釋?

根據文檔,在我看來,當觸發器被禁用時,主鍵索引也被禁用。

DISABLE/ENABLE [REPLICA |總是]觸發這些表格配置觸發屬於表的觸發器。禁用的觸發器是系統仍然知道的 ,但在觸發事件發生時不會執行。對於延遲觸發,當事件發生時檢查啓用狀態 ,而不是當觸發功能實際上執行 時。可以禁用或啓用由名稱指定的單個觸發器或表中的所有觸發器,或者僅用戶觸發器(此選項 不包括內部生成的約束觸發器,例如 用於實現外鍵約束或可延遲唯一性 和排除約束)。禁用或啓用內部生成的約束觸發器需要超級用戶權限;應該謹慎地執行 ,因爲如果未執行觸發器,約束的完整性不能保證爲 。觸發器觸發 機制也受配置變量 session_replication_role的影響。當複製角色爲「原始」(默認)或「本地」時,只需啓用觸發器就會觸發。將觸發器 配置爲ENABLE REPLICA將僅在會話處於 「副本」模式時觸發,並且配置爲ENABLE ALWAYS的觸發器將觸發 ,而不管當前的複製模式如何。

+0

由於文檔根本沒有提及索引,爲什麼您認爲它支持您的想法應該禁用索引? –

+0

要確定的唯一方法就是測試它。我的猜測 - 禁用觸發器不會禁用索引。 –

+0

我測試了它,發現禁用觸發器不會禁用索引,並解釋仍然使用索引。 –

回答

1

禁用觸發器不會禁用索引(爲什麼會這樣?)。

至於計劃

SELECT "users".* FROM "users" WHERE "users"."id" = 1; 

它可能會或可能不會使用基於許多因素指標。主要 - 表中的記錄數。