gpt4 book ai didi

sql - Postgres - 理解索引

转载 作者:行者123 更新时间:2023-11-29 11:41:17 25 4
gpt4 key购买 nike

使用 Postgres SQL - 我有关于索引以提高效率的一般性问题。

应该为下一个查询创建的最佳索引是什么?

SELECT task_name, user_name
FROM tasks
WHERE (user_id = 1 OR task_type = 'SOME_TYPE') and is_deleted = FALSE
GROUP BY task_name, user_name
  • WHERE 子句 (user_id, task_type, is_deleted) 中的列是否需要与 GROUP BY (task_name, user_name) 中的列位于同一索引中?

  • OR 运算符是否意味着列需要位于不同的索引上?

  • 据我所知,索引 bool 列通常不是一个好主意,因为弊大于利。 bool 列“is_deleted”是否需要与 WHERE 子句中的列一起位于索引中?

非常感谢帮助我理解它。

最佳答案

对于这种情况最好的索引取决于值分布和表大小。

假设表格足够大并且条件都是选择性的,我会使用:

CREATE INDEX tasks_user_id_idx   ON tasks(user_id)   WHERE NOT is_deleted;
CREATE INDEX tasks_task_type_idx ON tasks(task_type) WHERE NOT is_deleted;

您可以为 WHERE 子句或 GROUP BY 子句建立索引,我选择了前者。尝试 GROUP BY 列上的多列索引是否更适合您。

索引 bool 列没有多大意义,部分索引通常会更好。

多列索引无法帮助您处理 OR 条件,您唯一的希望是位图索引扫描。

关于sql - Postgres - 理解索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47903364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com