让人头疼的联合索引索引有关问题。
让人头疼的联合索引索引问题。。。
一个表 有个联合索引emp_no,title,from_date
1
1.1 SELECT * FROM tbl WHERE title ='Senior' and emp_no < '10001' //这里使用到了最左前缀的emp_no索引
1.2 SELECT * FROM tbl WHERE title ='Senior' and emp_no like '10001' //这里没有使用到索引
同样都是范围查询 为什么第二个没有使用emp_no索引?
2
2.1
用到了所有索引
2.2
只用到emp_no的索引
为什么? 第二个的title怎么没用到?
------解决方案--------------------
------解决方案--------------------
MYSQL在有多个索引可以选择的时候,优化器会选择一个它认为最有效率的索引,也有可能会用到2个索引,就是索引合并。
把你的EXPLAIN贴出来看看。
一个表 有个联合索引emp_no,title,from_date
1
1.1 SELECT * FROM tbl WHERE title ='Senior' and emp_no < '10001' //这里使用到了最左前缀的emp_no索引
1.2 SELECT * FROM tbl WHERE title ='Senior' and emp_no like '10001' //这里没有使用到索引
同样都是范围查询 为什么第二个没有使用emp_no索引?
2
2.1
- SQL code
SELECT * FROM tbl WHERE emp_no BETWEEN '10001' AND '10010' AND title='Senior Engineer' AND from_date BETWEEN '1986-01-01' AND '1986-12-31';
用到了所有索引
2.2
- SQL code
SELECT * FROM tbl WHERE emp_no BETWEEN '10001' AND '10010' AND title='Senior Engineer' AND from_date > '1986-01-01' AND from_date<'1986-12-31';
只用到emp_no的索引
为什么? 第二个的title怎么没用到?
------解决方案--------------------
------解决方案--------------------
MYSQL在有多个索引可以选择的时候,优化器会选择一个它认为最有效率的索引,也有可能会用到2个索引,就是索引合并。
把你的EXPLAIN贴出来看看。