【MySQL】索引:索引分类
索引分类
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照 物理实现 方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照 作用字段个数 进行划分,分成单列索引和联合索引。
====== 🌟 青柠来相伴,代码更简单。🌟 ======
📚 本文所有内容,我都整理成了文档资料。👇
🎯 搜索【青柠代码录】,关键字:青柠合集
🚀 即可查看所有博客文章 ~
====== 🌟 ================= 🌟 ======
按功能划分
普通索引
在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创建在 任何数据类型 中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索引以后,可以通过索引进行查询。
例如,在表个普通索引,查询记录时就可以根据该索引进行查询。student 的字段name 上建立
唯一性索引
在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值(一个),使用 UNIQUE参数可以设置索引为唯一性索引。
在一张数据表里 可以有多个 唯一索引。
例如,在表 student 的字段emai1 中创建唯一性索引,那么字段email的值就必须是唯一的。通过唯一性索引可以更快速地确定某条记录
随表一起创建:
CREATE TABLE customer (
id INT(10) UNSIGNED AUTO_INCREMENT,
customer_no VARCHAR(200),
customer_name VARCHAR(200),
PRIMARY KEY (id),
KEY (customer_name),
UNIQUE (customer_no)
);
单独建唯一索引:
CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no);
主键索引
主键索引就是一种 特殊的唯一性索引,在唯一索引的基础上,增加了不为空的约束,也就是 NOT NULL+UNIQUE
一张表里 最多只有一个 主键索引,只能有一个主键。
Why?这是由主键索引的物理实现方式决定的,因为数据存储在文件中只能按照一种顺序进行存储。
概念:设定为主键后数据库会自动建立索引,innodb为聚簇索引
随表一起建索引
CREATE TABLE customer (
id INT(10) UNSIGNED AUTO_INCREMENT,
customer_no VARCHAR(200),
customer_name VARCHAR(200),
PRIMARY KEY (id)
);
单独建主键索引:
ALTER TABLE customer add PRIMARY KEY customer(customer_no);
删除建主键索引:
ALTER TABLE customer drop PRIMARY KEY ;
修改建主键索引:
必须先删除掉(drop)原索引,再新建(add)索引
全文索引
1、是什么
- 一种专门用于文本搜索的索引
- 适合大量文字内容的模糊 / 关键词检索(比
LIKE %xxx%快得多) - 搜索引擎核心技术:分词 → 统计词频 → 按相关性排序
2、适用场景
适合:大数据量、长文本搜索(文章、内容、描述、评论)
不适合:小表、短字段、简单查询
3、支持条件
字段类型:CHAR、VARCHAR、TEXT 系列
MySQL 版本:
- 5.6.4 前:仅 MyISAM 支持
- 5.6.4+:InnoDB 也支持
中文支持:
- 5.7.6+:内置 ngram 分词器(原生支持中文)
- 低版本:需第三方插件
4、核心特点
- 允许重复值、允许 NULL
- 自动按相关性排序(不是插入顺序)
- 自然语言模式下:出现超过 50% 行的词会被忽略(如 “的”“是”)
5、两种搜索模式
自然语言模式(默认)
- 计算关键词匹配度
- 词频越高、越稀有 → 相关性越高
布尔模式
- 支持
+必须包含``-排除``*通配符等逻辑搜索
6、现代技术趋势
- MySQL 全文索引适合中小型文本搜索
- 大数据 / 高并发场景:已被 ElasticSearch、Solr 替代
按字段个数划分
单列索引
在表中的单个字段上创建索引。
单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。一个表可以 有多个 单列索引。
随表一起创建:
CREATE TABLE customer (
id INT(10) UNSIGNED AUTO_INCREMENT,
customer_no VARCHAR(200),
customer_name VARCHAR(200),
PRIMARY KEY (id),
KEY (customer_name)
);
单独建单值索引:
CREATE INDEX idx_customer_name ON customer(customer_name);
联合(组合、多列)索引
多列索引是在表的 多个字段组合 上创建一个索引。
该索引指向创建时对应的多个字段,可以通过这几个字段进行查询,但是只有查询条件中,使用了这些字段中的第一个字段时,才会被使用。
例如,在表中的字段id、name和gender上建立一个多列索引idx_id_name_gender,只有在查询条件中使用了字段id时该索引才会被使用。使用组合索引时遵循 最左前缀集合。
概念:即一个索引包含多个列
随表一起建索引:
CREATE TABLE customer (
id INT(10) UNSIGNED AUTO_INCREMENT,
customer_no VARCHAR(200),
customer_name VARCHAR(200),
PRIMARY KEY (id),
KEY (customer_name),
UNIQUE (customer_name),
KEY (customer_no, customer_name)
);
单独建索引:
CREATE INDEX idx_no_name ON customer(customer_no,customer_name);
本文由mdnice多平台发布

浙公网安备 33010602011771号