禁用触发器是否也会暂时禁用索引

时间:2013-07-30 04:20:30

标签: postgresql

我有一张标准表

 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 |总是] TRIGGER这些表格配置   触发属于该表的触发器。禁用的触发器是   仍然为系统所知,但在触发时不会执行   事件发生。对于延迟触发器,将检查启用状态   当事件发生时,而不是实际触发功能   执行。可以禁用或启用指定的单个触发器   表上的名称或所有触发器,或仅用户触发器(此选项   排除内部生成的约束触发器,例如那些   用于实现外键约束或可延迟唯一性   和排除约束)。禁用或启用内部生成的   约束触发器需要超级用户权限;应该这样做   当然,因为约束的完整性是不可能的   如果未执行触发器,则保证。触发器开火   机制也受配置变量的影响   session_replication_role。简单启用的触发器将在触发时触发   复制角色是“origin”(默认)或“local”。触发器   配置为ENABLE REPLICA只会在会话进入时触发   “副本”模式和配置为ENABLE ALWAYS的触发器将触发   无论当前的复制模式如何。

1 个答案:

答案 0 :(得分:1)

禁用触发器不会禁用索引(为什么会这样?)。

至于计划

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

它可能会也可能不会使用基于很多因素的索引。主要是 - 表中的记录数。