【发布时间】:2020-10-13 05:14:41
【问题描述】:
我有一个具有唯一索引的表。
CREATE UNIQUE INDEX task_index ON public.task USING btree (id, user);
我的大部分选择都使用 where id=?
那么我还需要在 ID 列上建立索引吗?还是唯一索引本身索引了该列?
【问题讨论】:
标签: sql postgresql unique
我有一个具有唯一索引的表。
CREATE UNIQUE INDEX task_index ON public.task USING btree (id, user);
我的大部分选择都使用 where id=?
那么我还需要在 ID 列上建立索引吗?还是唯一索引本身索引了该列?
【问题讨论】:
标签: sql postgresql unique
您已经创建的唯一索引使用带有id 作为第一个拆分字段的 B 树。该索引应该可用于仅包含 id 或 id 和 user 的 where 子句。对于前一种情况,考虑如下查询:
SELECT *
FROM task
WHERE id = 3;
Postgres 可以使用您当前的索引来查找对应于id = 3 的子树。对于这个子树下的所有叶子节点,它可以简单地扫描找到所有匹配的记录。
【讨论】:
user='something'@ 处做同样的索引将起作用