1

我有一张标准桌子

 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

如果我检查解释应该使用索引吗?

根据文档,在我看来,当触发器被禁用时,主键索引也被禁用。

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

4

1 回答 1

1

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

至于计划

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

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

于 2013-07-30T08:09:51.213 回答