联合索引顺序是 name,resource
EXPLAIN SELECT NAME FROM resource WHERE CODE in('category_role','btn_user_authorize','btn_roeladd')
所有记录一共只有19行,却检索了19行
EXPLAIN SELECT * FROM resource WHERE NAME in('用户授权','删除角色','btn_roeladd')
name放在条件上,只检索了3行。
EXPLAIN SELECT * FROM resource WHERE CODE in('category_role','btn_user_authorize','btn_roeladd')
条件上只放code,查询字段没有name,selectType是all,说明完全没用到索引
EXPLAIN SELECT * FROM resource WHERE NAME='用户授权' AND CODE='category_role'
条件语句把两个索引列都加上,逻辑是and,返回结果不唯一的等值查找可能出现ref
EXPLAIN SELECT * FROM resource WHERE NAME='用户授权' OR CODE='category_role'
逻辑是or,type是all,没有用到索引
EXPLAIN SELECT * FROM resource WHERE NAME !=''
EXPLAIN SELECT * FROM resource WHERE NAME <>''
EXPLAIN SELECT * FROM resource WHERE NAME is not null
以上三句都没有用上索引,type是all
总结:联合索引命中率
想用到索引,查询语句中(查询字段或条件语句)必须含 联合索引的最左列。
想高效的用索引,必须把联合索引的最左列放在条件语句上,查询条件最频繁的字段 适合做联合索引的最左列。
条件连接是or无法使用索引