mysql索引问题, 不知道到底用没用到索引

表结构如下:
clipboard.png

表数据如下:

clipboard.png

加了一个组合索引:

clipboard.png

查看资料说:
查询中某个列有范围查询,则其右边的所有列都无法使用查询

我的查询语句及结果分析如下(测试了两条语句):
1.

EXPLAIN
SELECT
    * 
FROM
    user_test 
WHERE
    user_name > 'haha' 
    AND age = 50 
    AND gender =1

clipboard.png

2.

EXPLAIN
SELECT
    * 
FROM
    user_test 
WHERE
    user_name = 'haha' 
    AND age > 50 
    AND gender =1

clipboard.png

上面到底是用没用到索引? key和possible_keys都有值 但是ref没有值 看不太懂了!!!

阅读 3.4k
4 个回答

扫描的行数都很少rows=1,2, 说明效率很好,要么是数据很少(?). 应该都是用到索引了
关于explain返回的表里type, key, ref的解释

可以看这里

http://bbs.csdn.net/topics/39...

如果你这么写条件:WHERE user_name > 'haha' AND age = 50 AND gender = 1,那么索引就应该建为:(age, gender, user_name)

原因很简单:复合索引的第一个列就用大于或小于,后面的列就废掉了。

新手上路,请多包涵

第一个用到了user_name列,后面两列没用到,第二个用到了user_name和age,两个查询你是select*了

索引段是只有你精确锁定才会使用该列索引,对于复合索引存在一个最左原则,从最左边开始精确定位就会使用,如果从左至右遍历的过程中某个字段使用了范围查询,那么mysql最多定位到这一列索引的范围,而不能精确定位下一列的索引位置,因此这个复合索引只能使用到这个范围查询字段,不管他右边的字段是不是精确查找。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题