当前位置: 首页 > news >正文

MySQL索引类型(type)分析

type索引类型

system > const > eq_ref > ref > range > index > all

优化级别从左往右递减,没有索引的⼀般为’all’。推荐优化目标:至少要达到 range 级别, 要求是 ref 级别, 如果可以是 const 最好;index比all更优,但是并不明显,性能都很差。

Type级别说明

1、system级别

  • 只有一条数据的系统表;
  • 或衍生表只能有一条数据的主查询;

这是const类型的特列,实际开发中难以达到(基本不会出现)。

2、const级别

  • 当使用 主键 或 唯一索引 进行等值查询时

实例

  • 表结构  
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(11) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `user_name_IDX` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
  • Primary key
explain select * from `user` u where id=1

  •   unique索引
explain select * from `user` u where name='zhangsan'

3、eq_ref级别

  • 联表查询的关联字段唯一索引或者主键

实例

  • 表结构 
CREATE TABLE `user_job` (`id` int(11) NOT NULL,`userId` int(11) NOT NULL,`job` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_name` (`name`) USING BTREE,KEY `user_job_userId_IDX` (`userId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 数据

 

 

 

  • 输出结果 
explain select uj.id ,u.name ,uj.job from  user_job uj  left join `user` u on  uj.userId =u.id

4、ref级别

  • 联表查询的关联字段或者单表查询的筛选字段普通索引

实例

  • 表结构
CREATE TABLE `user_job` (`id` int(11) NOT NULL,`userId` int(11) NOT NULL,`job` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_name` (`name`) USING BTREE,KEY `user_job_userId_IDX` (`userId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 输出结果
explain select * from user_job uj where name ='xx'

5、range级别

  • 使用主键或者索引,进行范围查询时
  • 常用范围查询 (between , in , > , < , >=),in有时会失效为ALL

实例

  • 表结构
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(11) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `user_name_IDX` (`name`) USING BTREE,KEY `user_age_IDX` (`age`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
  •  输出结果
explain select * from `user` u where id>1

explain select * from `user` u where name in('zhangsan','lisi')

explain select * from `user` u where age BETWEEN 10 and 20

6、index级别

  • 遍历索引树,把索引的数据全部查出来
explain select id,name from `user` u

explain select age from `user` u

7、ALL级别

  • 当不使用任何索引和主键时,进行全表扫描
explain select * from `user` u 

 

 

http://www.lryc.cn/news/23646.html

相关文章:

  • Linux | 2. 用户管理
  • 【MySQL之SQL语法篇】系统学习MySQL,从应用SQL语法到底层知识讲解,这将是你见过最完成的知识体系
  • CentOS8基础篇7:Linux系统启动配置
  • vue中的$forceUpdate()、$set()
  • 记住这3点,有效提高江苏专转本上岸率
  • 【经验总结】10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的?(文末赠书5本)
  • 人大金仓和达梦的空间数据能力对比
  • 探析集团企业 1+N 模式,重新定义集团型CRM
  • 卡特兰数
  • 分布式任务处理
  • Linux 命令复习
  • leetcode 困难 —— 天际线问题(优先队列)
  • 离散数学笔记_第一章:逻辑和证明(2 )
  • MFCC语音特征值提取算法
  • TencentOS3.1编译安装redis6.2.5
  • AI顶会accepted papers list
  • IOS逆向之frida安装
  • 《金山区提信心扩需求稳增长促发展行动方案》的通知
  • 【Redis】Java客户端JedisSpringDataRedis入门(三)
  • 挑选销售自动化工具应该关注什么功能?
  • thread.join 是干什么的?原理是什么?
  • 论文阅读 | Cross-Attention Transformer for Video Interpolation
  • 【C++修炼之路】22.哈希
  • HashMap原理(一):哈希函数的设计
  • 06--WXS 脚本
  • 【Vue3】vue3 + ts 封装城市选择组件
  • C语言if判断语句的三种用法
  • React中echarts的封装
  • IV测试系统3A太阳能模拟器在光伏中应用
  • Vue 中过滤器 filter 使用教程