聯合索引
聯合索引是多個字段上建立的索引,能夠加速複覈查詢條件的檢索。
舉例,登錄業務需求:
select uid, login_time from t_user where
login_name=? and passwd=?
可以建立(login_name, passwd)的聯合索引。
聯合索引能夠滿足最左側查詢需求,例如(a, b, c)三列的聯合索引,能夠加速a | (a, b) | (a, b, c) 三組查詢需求。
這也就是爲何不建立(passwd, login_name)這樣聯合索引的原因,業務上幾乎沒有passwd的單條件查詢需求,而有很多login_name的單條件查詢需求。
SQL語句裏,where條件中的and前後的順序,是否會影響索引的命中?
不會
舉個例子:
select uid, login_time from t_user where
passwd=? and login_name=?
能否命中(login_name, passwd)這個聯合索引?
可以,最左側查詢需求,並不是指SQL語句的寫法必須滿足索引的順序。