单独索引:为一个表中的一个或多个字段单独创建一个索引;
多列索引:为一个表中的多个字段,按顺序一同创建一个索引,多列索引也称为复合索引,联合索引,组合索引;
多列索引(联合索引)示例:
联合索引对于多个列进行条件查询的时候,执行顺序是从左到右;
表
SELECT * FROM xxb_sjh_news
创建联合索引,对表中category_id, factory_id, industry_id三个字段依次创建联合索引;
1.使用category_id, factory_id, industry_id三个字段进行条件搜索(索引有效)
EXPLAIN SELECT * FROM xxb_sjh_news a WHERE a.category_id='ERP' AND a.factory_id='蓝凌' AND a.industry_id='保险'
2.只使用第一个字段category_id,进行条件搜索(索引有效)
EXPLAIN SELECT * FROM xxb_sjh_news a WHERE a.category_id='ERP'
3.对第一个和第二个字段一起进行条件搜索(索引有效)
EXPLAIN SELECT * FROM xxb_sjh_news a WHERE a.category_id='ERP' AND a.industry_id='保险'
4.按顺序第一个字段不参与条件搜索,只使用第二,第三个字段搜索(索引无效)
EXPLAIN SELECT * FROM xxb_sjh_news a WHERE a.factory_id='蓝凌' AND a.industry_id='保险'
5.把 and 换成 or,发现联合所索引无效!
EXPLAIN SELECT * FROM xxb_sjh_news a WHERE a.category_id='ERP' OR a.industry_id='保险'
多个单列索引在多条件查询时优化器会选择最优索引策略,可能只用一个索引,也可能将多个索引全用上! 但多个单列索引底层会建立多个 B+索引树,比较占用空间,也会浪费一定搜索效率,故如果只有多条件联合查询时最好建联合索引!
联合索引原理是:当创建(A,B,C)联合索引(多列索引)时,相当于创建了(A)单列索引,(A,B)联合索引以及(A,B,C)联合索引;所以要想让索引生效,只能使用 A 和 A,B 和 A,B,C三种组合;当然,我们上面测试过,A,C 组合也可以,但实际上只用到了 A 的索引,C 并没有用到!