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

详细介绍MySQL的索引类型

示例一: 

use martin;CREATE TABLE `index_test` (
`id` int NOT NULL AUTO_INCREMENT,
`a` int NOT NULL,
`b` char(2) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;insert into index_test(a,b) values (1,'a'),(2,'b'),(3,'c'),(5,'e'),(6,'f'),(7,'g'),(9,'i');

一、聚集索引

图为根据示例一创建表的B+树,第二行阴影部分就是主键,每个叶子节点包含全部数据

聚集索引的特点

  • 聚集索引就是按照每张表的主键构造的一颗B+树
  • InnoDB的主键一定是聚集索引
  • 每张表只能有一个聚集索引

二、辅助索引

 继续拿示例一索引来举例,a字段包含1,2,3,5,6,7,9,可以看出都是按a字段构建的B+树键值,底下的id是主键

辅助索引是先在辅助索引树找到id=3,再去聚集索引树中找到对应的数据

select * from index_test where a =3;   -- 先辅助索引再聚集索引
select * from index_test where id =3;  -- 直接走聚集索引

在现有的表上添加辅助索引

alter table users_info add index idx_email(email);create index idx_email_01 on users_info (email);

辅助索引的特点

  • 辅助索引的叶子节点并不会放整行数据
  • 辅助索引树查到主键再通过聚集索引树找到行数据
  • 一颗高度为3的辅助索引树查询记录需要至少6次逻辑IO

三、唯一索引

唯一索引的特点

  • 唯一性
  • 唯一索引的更新不能使用Change Buffer
比如我们给users_info添加唯一索引
alter table users_info add unique key uniq_email (email);

四、联合索引

索引按创建时指定的列顺序排序。例如先按照a字段排序,再按照b字段排序。

所以b字段是无序的,B + 树支持 “最左前缀匹配”,即查询条件必须从索引的第一列开始,且中间不能跳过列。例如:

  • WHERE col1 = 1 AND col2 = 2 可以使用索引
  • WHERE col2 = 2 无法使用索引(未从 col1 开始)
alter table users_info add index idx_username_email(username,email);

五、前缀索引

有比较长的字符串列,直接在这个字段创建索引,会导致索引占用过多的空间,这个时候就可以考虑使用前缀索引

  • 使用前缀索引的场景:char或者varchar太长
  • 前缀索引的缺点:无法利用前缀索引完成排序
alter table users_info add index idx_email_2(email(2));

六、全文索引

  • 全文索引的作用:字段中找到几个关键字
  • 全文索引的创建
ALTER TABLE englishphrases ADD FULLTEXT (phrase);
  • 进行全文搜索
SELECT * FROM englishphrases WHERE MATCH(phrase) AGAINST ('you');

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

相关文章:

  • Maven之依赖管理
  • 基于tk界面库的扩展类
  • 网络:基础概念
  • nacos启动报错:Unable to start embedded Tomcat。
  • 基于POD和DMD的压气机叶片瞬态流场分析与神经网络预测
  • iview: 对输入框进行Poptip 换行提示
  • 【Redis】 Redis 基础命令和原理
  • 从治理到共情——平台伦理的乡村共建之路
  • 数据空间技术在智慧水库管理平台中的赋能
  • 每日面试题15:如何解决堆溢出?
  • 2.JVM跨平台原理(字节码机制)
  • 嵌入式硬件篇---zigbee无线串口通信问题解决方法
  • 【6G新技术探索】AG-UI(Agent User Interaction Protocol) 协议介绍
  • 大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(1):总体介绍
  • 设计模式十一:享元模式(Flyweight Pattern)
  • 融合为体,AI为用:数据库在智能时代的破局之道
  • 快速入门Linux操作系统(一)
  • 测试分类
  • AWD的攻击和防御手段
  • base64魔改算法 | jsvmp日志分析并还原
  • HCLP--MGER综合实验
  • JVM常见工具
  • AI 编程还有多远?我们如何迎接 AI 编程时代?
  • 【MySQL数据库备份与恢复2】备份的三种常用方法
  • MPI练习:前缀和问题
  • Effective C++ 条款4:确定对象被使用前已先被初始化
  • 7月26日星期六今日早报简报微语报早读
  • Effective C++ 条款03:尽可能使用const
  • 【AcWing 154题解】滑动窗口
  • 【音视频协议篇】WebRTC 快速入门