给定列列表的 Postgres 复合索引有效性

Postgres compound index effectiveness with a given column list

假设我有一个涉及这 3 列的复合索引。

(name, email, phone)

这个索引还会用于这些查询吗?第一个查询只涉及 2 个索引字段,第二个索引使用更多的字段。顺便说一句,哪种索引类型最适合这个?

SELECT * FROM person WHERE emails = 'xxx@email.com' AND phone = '012645678'

SELECT * FROM person WHERE name = 'dude' AND emails = 'xxx@email.com' AND phone = '012645678' AND title = 'CEO'

对于典型的 b-tree 索引应该用于第二个查询(可能取决于 table 统计数据)。一般情况下,索引从"left to right"开始使用,在where有相等条件。第一个查询在 name.

上没有条件

没有一个索引对两个查询都是最佳的,但是 (emails, name) 上的索引可能会很好。

另请注意,phone 数字通常存储为字符串。你的比较是一个数字。类型转换会影响索引的使用。