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

时间:2018-10-11 11:58:54

标签: sql postgresql indexing compound-index

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

(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'

1 个答案:

答案 0 :(得分:1)

对于典型的b树索引,第二个查询应使用索引(可能取决于表统计信息)。通常,从“左到右”使用索引,在where中使用相等条件。第一个查询在name上没有条件。

对于这两个查询,没有单个索引是最佳选择,但是在(emails, name)上的索引可能会很好。

还请注意,电话号码通常以字符串形式存储。您的比较是一个数字。类型转换会影响索引的使用。