news 2026/5/9 11:15:04

MYSQL索引篇--基础知识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MYSQL索引篇--基础知识

索引:索引的出现其实就是为了提高数据库的查询效率,就像书的目录一样。

MYSQL在查询方面主要就是两种方式:全表扫描和根据索引检索

索引的基本操作

创建索引

create index 索引名 on 表名

删除索引

drop index 索引名 on 表名

查看一个SQL语句是否使用了索引进行检索

在SQL语句前 添加explian关键字

  • type=ALL时,表示使用 全表查询(未使用索引)

  • type=RES时,表示使用索引

索引有哪些类别

按数据结构分类:B+tree索引,Hash索引,Full-text索引

InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。

在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引:

• 如果有主键,默认会使用主键作为聚簇索引的索引键(key);
• 如果没有主键,就选择第一个不包含 NULL 值的唯一列作为聚簇索引的索引键(key);
• 在上面两个都没有的情况下,InnoDB 将自动生成一个隐式自增 id 列作为聚簇索引的索引键(key);

其它索引都属于辅助索引(Secondary Index),也被称为二级索引或非聚簇索引。创建的主键索引和二级索引默认使用的是 B+Tree 索引。

按物理储存分类聚簇索引(主键索引)、二级索引(辅助索引)

InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。

在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引:

• 如果有主键,默认会使用主键作为聚簇索引的索引键(key);
• 如果没有主键,就选择第一个不包含 NULL 值的唯一列作为聚簇索引的索引键(key);
• 在上面两个都没有的情况下,InnoDB 将自动生成一个隐式自增 id 列作为聚簇索引的索引键(key);

其它索引都属于辅助索引(Secondary Index),也被称为二级索引或非聚簇索引。创建的主键索引和二级索引默认使用的是 B+Tree 索引。

按字段特性分类:主键索引,唯一索引,普通索引,前缀索引。

主键索引

主键索引就是建立在主键字段上的索引,通常在创建表的时候一起创建,一张表最多只有一个主键索引,索引列的值不允许有空值。

在创建表时,创建主键索引的方式如下:

create table table_name( .... PRIMARY KEY(index_column_1) USING BTREE );
唯一索引

唯一索引建立在 UNIQUE 字段上的索引,一张表可以有多个唯一索引,索引列的值必须唯一,但是允许有空值。

在创建表时,创建唯一索引的方式如下:

CREATE TABLE table_name( .... UNIQUE KEY(index_column_1,index_column_2,...) );

建表后创建唯一索引,可以用下面的语句:

CREATE UNIQUE INDEX index_name ON table_name(index_column_1,index_column_2,...);
普通索引

普通索引建立在普通字段的索引,不要求字段为主键,也不要求字段为unique.

在创建表时,创建普通索引的方式如下:

CREATE TABLE table_name( .... INDEX(index_column_1,index_column_2,...) );

建表后创建普通索引,可以用下面的语句:

CREATE INDEX index_name ON table_name(index_column_1,index_column_2,...);
前缀索引

前缀索引是指对字符类型字段的前几个字符建立的索引,而不是在整个字段上建立的索引,前缀索引可以建立在字段类型为 char、 varchar、binary、varbinary 的列上。

使用前缀索引的目的是为了减少索引占用的存储空间,提升查询效率。

在创建表时,创建普通索引的方式如下:

CREATE TABLE table_name( column_list, INDEX(column_name(length)) );

建表后创建普通索引,可以用下面的语句:

CREATE INDEX index_name ON table_name(column_name(length));

按字段个数分类:单列索引,联合索引。

索引区分度:索引区分度表示某个字段不同值得个数占整个表的比列建立联合索引时,要把区分度大的字段排在前面。

索引的优缺点

优点:

  • 使用索引可以大大加快数据的检索速度(大大减少检索的数据量),这也是创建索引的最主要的原因。
  • 但是注意使用索引不一定能够提高查询性能,因为如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。其余大多数情况下,索引查询比全表扫描要快。
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

缺点:

  • 空间消耗,一个索引对应的就是一棵 B+树,每一个节点都是一个 16KB 大小的页。占用的空间较大

  • 创建索引和维护索引需要耗费许多时间,当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。

创建索引的场景

  • 频繁用于查询的列需要创建索引
  • 大表:对于很大的表,建立索引可以提高查询速度
  • 唯一性要求:主键列和唯一性约束的列会自动创建唯一索引,但如果查询中经常包含唯一性条件,可以额外创建唯一性索引。
  • 连接表的外键列:为外键列创建索引可以提高连接的效率。
  • 频繁使用排序和分组的列:如果某列经常用于 ORDER BY 或 GROUP BY 子句可以创建索引

不创建索引的场景

  • 小表:在小表上,索引不会带来显著的性能提升,还会增加维护开销。
  • 经常进行更新的字段不需要创建索引
  • 很少用于查询的字段
  • 字段中存在大量重复数据,不需要创建索引,比如性别字段

索引优化的方法

  • 前缀索引优化:使用某个字段中字符串的前几个字符建立索引,从而减小索引字段大小

  • 覆盖索引优化:从二级索引中可以查询得到记录,避免回表

  • 主键索引最好是自增的;这样每次插入一条新记录,都是追加操作,不需要重新移动数据,而使用非自增主键会导致插入主键的索引值是随机的,这可能会插入到现有数据页的某个位置,导致其他数据的移动,造成页分裂。

  • 避免过多的索引

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 5:56:15

计算机毕设java网络相册管理系统 基于Java的在线相册管理系统设计与实现 Java网络相册管理系统的开发与应用

计算机毕设java网络相册管理系统090o29 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网的飞速发展,人们的生活方式发生了翻天覆地的变化。尤其在疫情期间&…

作者头像 李华
网站建设 2026/4/27 10:41:49

大型语言模型在自动问答系统中的应用

大型语言模型在自动问答系统中的应用 关键词:大型语言模型、自动问答系统、自然语言处理、知识表示、语义理解 摘要:本文深入探讨了大型语言模型在自动问答系统中的应用。首先介绍了相关背景,包括目的范围、预期读者等。接着阐述了核心概念与联系,分析了核心算法原理及具体…

作者头像 李华
网站建设 2026/5/9 7:04:42

花授粉优化算法改进及应用毕业论文【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅ 具体问题可以私信或扫描文章底部二维码。(1)融合被囊群与差分变异的混合搜索策略 针对基础花授粉算法在处理高维…

作者头像 李华
网站建设 2026/4/30 13:48:07

改进哈里斯鹰与机器学习滑坡预测毕业论文【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅ 具体问题可以私信或扫描文章底部二维码。(1)基于改进哈里斯鹰优化与遗传规划的IHHO-IBP组合模型 针对传统BP神经…

作者头像 李华
网站建设 2026/5/9 7:04:48

深度学习相干光通信优化算法毕业论文【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 具体问题可以私信或扫描文章底部二维码。 (1)低复杂度混合时频域色散均衡方案(Hybrid LDBP&#xf…

作者头像 李华