+ -
当前位置:首页 → 问答吧 → 让人头疼的联合索引索引问题。。。

让人头疼的联合索引索引问题。。。

时间:2011-11-24

来源:互联网

一个表 有个联合索引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.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怎么没用到?

作者: nindeping   发布时间: 2011-11-24

贴出你的 
explain SELECT * FROM tbl WHERE title ='Senior' and emp_no < '10001' ;

explain SELECT * FROM tbl WHERE title ='Senior' and emp_no like '10001'

作者: ACMAIN_CHM   发布时间: 2011-11-24

引用
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';

用到了所有索引
MYSQL一次只会用一个索引。不可能用到所有索引。

作者: ACMAIN_CHM   发布时间: 2011-11-24

引用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怎么没用到?
贴出EXPLAIN 和SHOW INDEX FROM TBL;

作者: ACMAIN_CHM   发布时间: 2011-11-24