假设我有一个涉及这 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)
上的索引可能会做得很好。
另请注意,电话号码通常存储为字符串。 你的比较是一个数字。 类型转换可能会影响索引的使用。