mysql 主键索引,组合索引,单列索引使用场景

  • Post author:
  • Post category:mysql




mysql 主键索引,组合索引,单列索引使用场景

CREATE TABLE

button

(


id

bigint(20) NOT NULL AUTO_INCREMENT, –主键索引


button_name

varchar(45) NOT NULL COMMENT ‘功能名称’,


app_id

bigint(20) NOT NULL,


permission_id

bigint(20) DEFAULT NULL, – permission_id 和 app_id 联合索引。


api_id

bigint(20) NOT NULL, –api_id单独索引

PRIMARY KEY (

id

),

KEY

index_app_permission_lianhe

(

permission_id

,

app_id

) USING BTREE,

KEY

index_api_id_dange

(

api_id

)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

主键索引,单独索引,组合索引使用场景及优化

表button 有3个索引,分别是:id主键,联合索引(permission_id,app_id),api_id(单列索引)

button_name 无索引

查询where条件中:

主键索引:

1、主键索引与联合索引同时存在,使用主键索引

2、主键索引与单个索引同时存在,使用主键索引

结论:只要主键索引在,使用主键索引。

联合索引 :

1、联合索引与单列索引列 同时存在,使用单列索引

2、联合索引中列顺序颠倒无影响。

3、联合索引实行最左侧原则(最左原则在我另一篇博客有提到)。

4、如果查询条件中只有app_id,但是select 条件中有 permission_id,则也使用联合索引。

5、select id,app_id from button where app_id=1001; 使用联合索引

6、explain select id,app_id,button_name from button where app_id=1001;不使用联合索引

结论:索引优先级:主键索引,单列索引,组合索引

联合索引中遵从最左侧列原则。

当查询条件和返回结果中仅仅包含联合索引中索引项,也使用联合索引。如第4条。

当查询条件中出现联合索引中非最左侧索引列,返回结果中含义联合索引中的列或者主键则也使用联合索引。



版权声明:本文为java1473727528原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。