给定列列表的 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 数字通常存储为字符串。你的比较是一个数字。类型转换会影响索引的使用。
假设我有一个涉及这 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 数字通常存储为字符串。你的比较是一个数字。类型转换会影响索引的使用。