McM*_*del 3 sql postgresql indexing
使用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
Run Code Online (Sandbox Code Playgroud)
WHERE子句中的列(user_id,task_type,is_deleted)是否需要与GROUP BY(task_name,user_name)中的索引相同?
OR运算符是否意味着列需要位于不同的索引上?
从我熟悉的情况来看,索引布尔列通常不是一个好主意,因为缺点是大于好处.布尔列'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;
Run Code Online (Sandbox Code Playgroud)
您可以索引WHERE子句或GROUP BY子句,我选择了前一个选项.尝试GROUP BY列上的多列索引更适合您.
索引布尔列没有多大意义,像我的例子中的部分索引通常更好.
多列索引无法帮助您处理OR条件,您唯一的希望是位图索引扫描.