MySQL的索引 之组合索引使用



mysql中组合索引(联合索引)的使用

对于查询select  *  fromtable_name where  uid=xx uidnd gpdm=xx 的形式

可以使用(uid,gpdm)这样子的组合索引,

对于查询 select * fromtable_name where uid=xx 的形式

也可以使用(uid,gpdm)这样子的组合索引

但是对于查询select *from table_name where gpdm=xx 的形式

不可以使用(uid,gpdm) 这样子的组合索引,除了sql语句中有统计操作之外。

例如 select count(*)  fromtable_name where gpdm=xxx and …gpdm=xxx;

151628381.png

151652173.png



possible_keysNULL,但是key却为userid_2联合索引。using index 表示使用覆盖索引。

覆盖索引的定义

官方解释

MySQL的索引 之组合索引使用_第1张图片


即:一个包括所有要检索列的索引,不用再通过索引值去检索全部表数据,通过索引就可以直接取到数据。

Innodb引擎中的辅助索引(即第二索引) 包含了主键列信息。即

MySQL的索引 之组合索引使用_第2张图片


例如:

151844292.png

151904812.png

userid_2为组合索引(userid,buy_duidte)

userid为索引userid

可以看到key键中直接选用了userid_2,并且type=ref.  extruidusing index ,using where


如果强制使用userid索引

151932811.png

151953609.png

可以看到extruid中使用了using filesort, keyuserid