假设我有一个涉及这三列的复合索引。
(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'
答案 0 :(得分:1)
对于典型的b树索引,第二个查询应使用索引(可能取决于表统计信息)。通常,从“左到右”使用索引,在where
中使用相等条件。第一个查询在name
上没有条件。
对于这两个查询,没有单个索引是最佳选择,但是在(emails, name)
上的索引可能会很好。
还请注意,电话号码通常以字符串形式存储。您的比较是一个数字。类型转换会影响索引的使用。