0

假设我有一个涉及这 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'
4

1 回答 1

1

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

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

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

于 2018-10-11T12:02:13.297 回答