2013-07-30 41 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; 

它可能会或可能不会使用基于许多因素指标。主要 - 表中的记录数。