使用 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/