鍍金池/ 問答/數(shù)據(jù)庫/ mysql索引問題, 不知道到底用沒用到索引

mysql索引問題, 不知道到底用沒用到索引

表結(jié)構(gòu)如下:
clipboard.png

表數(shù)據(jù)如下:

clipboard.png

加了一個組合索引:

clipboard.png

查看資料說:
查詢中某個列有范圍查詢,則其右邊的所有列都無法使用查詢

我的查詢語句及結(jié)果分析如下(測試了兩條語句):
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沒有值 看不太懂了!!!

回答
編輯回答
命多硬

如果你這么寫條件:WHERE user_name > 'haha' AND age = 50 AND gender = 1,那么索引就應(yīng)該建為:(age, gender, user_name)。

原因很簡單:復(fù)合索引的第一個列就用大于或小于,后面的列就廢掉了。

2017年3月5日 16:14
編輯回答
傲寒

掃描的行數(shù)都很少rows=1,2, 說明效率很好,要么是數(shù)據(jù)很少(?). 應(yīng)該都是用到索引了
關(guān)于explain返回的表里type, key, ref的解釋

可以看這里

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

2017年8月10日 16:15
編輯回答
不歸路

第一個用到了user_name列,后面兩列沒用到,第二個用到了user_name和age,兩個查詢你是select*了

2018年5月21日 11:22
編輯回答
情皺

索引段是只有你精確鎖定才會使用該列索引,對于復(fù)合索引存在一個最左原則,從最左邊開始精確定位就會使用,如果從左至右遍歷的過程中某個字段使用了范圍查詢,那么mysql最多定位到這一列索引的范圍,而不能精確定位下一列的索引位置,因此這個復(fù)合索引只能使用到這個范圍查詢字段,不管他右邊的字段是不是精確查找。

2017年10月2日 18:59