当前位置: 首页 > 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.dtcms.com/a/299704.html

相关文章:

  • mybatis-plus从入门到入土(三):持久层接口之IService
  • 【MySQL】MySQL 缓存方案
  • 【Redis】Linux 配置Redis
  • 基于华为ENSP的OSPFLSA深入浅出-0
  • 从三维Coulomb势到二维对数势的下降法推导
  • Netty中DefaultChannelPipeline源码解读
  • LangChain vs LangGraph:从困惑到清晰的认知之路(扫盲篇)
  • (一)使用 LangChain 从零开始构建 RAG 系统|RAG From Scratch
  • RM-R1: Reward Modeling as Reasoning
  • Java java.util.Scanner 使用教程
  • 工作流的研究方向
  • (Python)文件储存的认识,文件路径(文件储存基础教程)(Windows系统文件路径)(基础教程)
  • 嵌入式分享#27:原来GT911有两个I2C地址(全志T527)
  • 数据湖产品全解析:2025 年主流解决方案选型指南
  • 酒店智能门锁SDK新V门锁系统接口函数[2025版]Delphi 7.0——东方仙盟硬件接口库
  • AI三巨头:机器学习、深度学习与人工智能解析
  • k8s:利用kubectl部署nginx
  • window10和ubuntu22.04双系统之卸载ubuntu系统
  • 方案C,version2
  • Fast_Lio 修改激光雷达话题
  • 【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型
  • 【Canvas技法】绘制正N角星
  • 【机器学习-1】特征工程与KNN分类算法
  • 鲲鹏服务器logstash采集nginx日志
  • 微分方程入门之入门之入门,纯笔记
  • Android Jetpack 组件库 ->WorkManager
  • 【Keepalived】高可用集群
  • Illustrator 删除编辑记录
  • 【简述】C++11/14/17/20/23 中的关键新特性
  • MPI练习:前缀和问题