【发布时间】:2013-07-30 16:09:51
【问题描述】:
我有一张标准桌子
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 的触发器将触发 无论当前的复制模式如何。
【问题讨论】:
-
既然文档根本没有提到索引,为什么你认为它支持你应该禁用索引的想法?
-
唯一确定的方法是测试它。我的猜测 - 禁用触发器不会禁用索引。
-
我测试了一下,发现禁用触发器并没有禁用索引,说明还是使用了索引。
标签: postgresql