试验联合索引


联合索引顺序是 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无法使用索引


猜你喜欢

转载自blog.csdn.net/u014203449/article/details/80232511