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



假设我有一个涉及这 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 树索引,应该用于第二个查询(可能取决于表统计信息(。 通常,索引从"从左到右"使用,where中具有相等条件。 第一个查询对name没有条件。

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

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

相关内容

  • 没有找到相关文章

最新更新