四时宝库

程序员的知识宝库

MySQL单列索引和多列索引示例详解

单独索引:为一个表中的一个或多个字段单独创建一个索引;

多列索引:为一个表中的多个字段,按顺序一同创建一个索引,多列索引也称为复合索引,联合索引,组合索引;

多列索引(联合索引)示例:

联合索引对于多个列进行条件查询的时候,执行顺序是从左到右;

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 并没有用到!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接