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

复制代码
 1 CREATE TABLE button (
 2   id bigint(20) NOT NULL AUTO_INCREMENT, --主键索引
 3   button_name varchar(45) NOT NULL COMMENT "功能名称",
 4   app_id bigint(20) NOT NULL,
 5   permission_id bigint(20) DEFAULT NULL, – permission_id 和 app_id 联合索引。
 6   api_id bigint(20) NOT NULL, --api_id单独索引
 7   PRIMARY KEY (id),
 8   KEY index_app_permission_lianhe (permission_id,app_id) USING BTREE,
 9   KEY index_api_id_dange (api_id)
10 ) 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条。
  • 当查询条件中出现联合索引中非最左侧索引列,返回结果中含义联合索引中的列或者主键则也使用联合索引。

 

posted @   郭慕荣  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示