本篇文章带大家了解一下mysql中的组合索引,介绍一下创建、删除组合索引的方法,聊聊组合索引陷阱、组合索引与单列索引的区别、组合索引使用场景,希望对大家有所帮助!

什么是组合索引
两个或更多个列上的索引被称作联合索引,联合索引又叫组合索引。【相关推荐:mysql视频教程】
例如索引是
key index (a,b,c)可以支持
a | a,b| a,b,c3 种组合进行查找,但不支持
b,c进行查找。在使用的时候,
a, c组合也可以用,但实际上只用到了
a的索引

创建组合索引
-- 普通的组合索引 create index index_name on table_name (column1, column2, ...) -- 组合要求唯一的索引,相比与上一种,多出了 【unique】关键字 create unique index index_name on table_name (column1, column2, ...)

删除组合索引
-- 用法 1 drop index index_name on talbe_name -- 用法 2 alter table table_name drop index index_name -- 用法 3,对 2 的包装 alter table table_name drop primary key
单列索引陷阱


如图所示,我们创建了 2 个索引,在 where 中使用
and进行查询是,从执行计划里看只使用到了第一个条件上的索引,后续的索引直接被忽略掉
组合索引陷阱
如图,现在建立组合索引 a,b,c

上图的条件查询为
b,a,c,mysql 会自动处理条件顺序变为
a,b,c, 再使用定义好的组合索引

上图的查询条件是
b,a,同样的,mysql 调整条件顺序为
a,b,再走组合索引

上图的查询条件是
b,c,很明显,由于没有使用
a作为条件列,导致 mysql 没有使用组合索引
与单列索引的区别
联合索引中列的顺序非常重要,从左原则。
单个索引就是一个一个起作用,也就是说有三个单个索引,哪个条件查询在前哪个起作用,其他不起作用。
组合索引使用场景
where 条件会经常出现的,并且当前表的数量比较大。
where 条件中是用
and而非
or的时候。
联合索引比单个索引更适合,因为索引占用一定磁盘空间,也就说明有一定的开销,如果多个单个索引比较多,那么多资源的浪费也比较多,联合索引相当于对多个列建索引,并且只建一次,and 条件下非常适合。
更多编程相关知识,请访问:编程视频!!
