【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多平台发布

posted @ 2026-03-19 10:51  青柠代码录  阅读(4)  评论(0)    收藏  举报