【MySQL数据库】MySQL索引

article/2025/11/3 11:30:19

MySQL索引、事务与存储引擎

  • 一、索引
    • 1.1索引的概念
    • 1.2索引的作用
    • 1.3索引的工作原理
    • 1.4索引的副作用
    • 1.5索引的应用场景
  • 二、索引的创建与分类
    • 2.1普通索引,最基本的索引类型,没有唯一性之类的限制。
    • 2.2唯一索引
    • 2.3 主键索引
    • 2.4组合索引
    • 2.5全文索引
  • 三、删除索引,查看索引
    • 3.1删除索引
    • 3.2扩展explain命令

一、索引

1.1索引的概念

  • 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
  • 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。
  • 通俗点说:索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址

1.2索引的作用

  • ·设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
  • 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
  • 可以降低数据库的TO成本并目索引还可以降低数据库的排序成本
  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  • 可以加快表与表之间的连接
  • 在使用分组和排序时,可大大减少分组和排序的时间。
  • 建立索引在搜索和恢复数据库中的数据时能显苦提高性能

一句话概括:加快表的查询速度,还可以对字段排序

1.3索引的工作原理

  • 没有索引的情况下,要查询某行数据,需要先扫描全表来定位某行数据
  • 有索引后会通过查找条件的字段值找到其索引对应的行数据的物理地址,然后根据物理地址访问相应的数据

1.4索引的副作用

  • 索引会占据磁盘空间
  • 索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。

1.5索引的应用场景

  • 1)表中的记录行数较多时,一般超过300行的表建议要有索引
  • 2)建议在 表中的主键字段、外键字段、多表连接使用的字段、唯一性较好的字段,不经常更新的字段、经常出现在where、group by、order by 子语句的字段、小字段 创建索引
  • 3)不建议在 唯一性较差的字段、更新太频繁的字段、大文本字段上创建索引

二、索引的创建与分类

2.1普通索引,最基本的索引类型,没有唯一性之类的限制。

直接创建索引

CREATE INDEX索名 ON 表名 (列名[(length)1);
#(列名(length)): length是可选项,下同。如果忽略 enqth 的值,则使用整个列的值作为索引。如果指定,使用列的前 lenath个字符来创建索引,这样有利于减小索引文件的大小。在不损失精确性的情况下,长度越短越好。#索引名建议以"index"结尾

在这里插入图片描述
修改表的方式创建

ALTER TABLE 表名 ADD UNIOUE 索引名 (列名);

在这里插入图片描述
创建表的方式创建

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名(列名));

在这里插入图片描述

2.2唯一索引

  • 唯一索引:与普通索引类似,但区别是唯一索引列的每个值都难一,唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建。则列值的组合必须啡一。添加唯一键将自动创建唯一索引。
#直接创创建唯一索引
CREATE UNIOUE INDEX 索引名ON 表名(列名);
create unique index cardid index on member(cardid);
#修改表方式创建
ALTER TABLE 表名 ADD UNIOUE 索引名 (列名);
#创建表的时候指定
CREATE TABLE 表名(字段1 数据类,字段2 数据类型...],UNIOUE 索引名 (列名));

在这里插入图片描述
在这里插入图片描述

2.3 主键索引

  • 主键索引:是一种特殊的唯一索引,必须指定为"PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。
#创建表的时候指定
CREATE TABLE 表名 ([..l,PRIMARY KEY (列名));
#修改表方式创建
ALTER TABLE 表名 ADD PRIMARY KEY (列名);

在这里插入图片描述
在这里插入图片描述

2.4组合索引

组合索引:(单列索引与多列索引);可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为 select 语句的 where条件是依次从左往右执行的,所以在使用 select 语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

#直接创建索引
create index 索引名 on 表名 (列表1,列表2,列表3)
#修改表方式创建
alter table 表名 add index 索引名 (列表1,列表2,列表3)#创建表的时候指定
CREATE TABLE 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 列名1,列名2,列名3));
#用唯一键创建组合索引
create unique index 
索引名 on 表名 (列表1,列表2);
#修改的方式创建
alter table 表名 add unique 索引名 (列表1,列表2);
#查询
select* from 表名 where 列名1='...'AND 列名2=...  AND 列名3=...';

用 and 做条件逻辑运算符时,要创建组合索引且要满足最左原则
用 or 做条件逻辑运算符时,所有字段都要创建索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5全文索引

  • 全文索引:适合在进行糊查询的时候使用,可用于在一篇文章中检索文本信息。在 MSOL5.6 版本以前EULLTEXI索引仅可用于 MySAM引,在 5.6 版本之后 modb 引也支持 ELLTEXT 索。全文索可以在CHAR、VARCHAR或者 TEX类型的列上创建

注意:数据类型可以为CHAR、VARCHAR或者TEXT

#直接创建索引
CREATE FULLTEXT INDEX 索引名ON 表名 (列名);
#修改表方式创建
ALTER TABLE 表名ADD EULLTEXT 索名(列名);
alter table member add fulltext remark index (remark);
#创建表的时候指定索引
CREATE TABLE 表名 (字段1 数据类型[,...],EULLTEXT 索引名 (列名));

在这里插入图片描述

在这里插入图片描述
全文索引查询方式

模糊查询: select 列表 from 表名 where match(字段) against('查询内容');

在这里插入图片描述

三、删除索引,查看索引

3.1删除索引

# 修改表结构的方式删除
alter table 表名 drop index 索引名;
#直接删除
drop index 索引名 on 表名;
#删除主键索引
alter table 表名 drop primary key;

在这里插入图片描述
在这里插入图片描述
查看索引

show create table 表名;
show index from 表名;
show keys from 表名
字段含义
Table表的名称
Non_unique如果索引不能包括重复词,则为 0:如果可以,则为 1。
Key_name索引的名称
Seq_in_index索引中的列序号,从 1开始
Column_name列名称
Collation列以什么方式存储在索引中。在 MySQL 中,有值A’(升序)或 NULL (无分类)
Cardinality索引中唯一值数目的估计值
Sub_part如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL
Packed指示关键字如何被压缩。如果没有被压缩,则为 NULL
Null如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO
Index_type用过的索引方法 (BTREE,FULLTEXT,HASH,RTREE)
Comment备注

在这里插入图片描述
在这里插入图片描述

3.2扩展explain命令

  • 可以用于分析select查询语句,看key字段,确定是否使用了索引或索引使用是否正确
字段含义
possible_keys显示可能应用在这张表中的索引
key实际使用的索引。如果为 NULL,则没有使用索引。
key_len使用的索引的长度。在不损失精确性的情况下,长度越短越好,
ref显不索引的哪一列被使用了,如果可能,则是一个常数。
Extra关于MySQL 如何解析查询的额外信息。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/t35mco9Y.shtml

相关文章

MySQL数据库索引机制

文章目录 一、MySQL缓冲区二、MySQL的page1.认识单个page2.认识多个页3.聚簇索引和非聚簇索引 三、索引的操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引的方法5.删除索引的方法6.索引创建原则 一、MySQL缓冲区 MySQL是一款有客户端和服务端的网络应用&#xff0c…

MySQL数据库索引教程(超详细)

索引初步 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 …

【MySql】数据库索引

数据库索引 索引索引的创建索引的查看索引的删除 聚簇索引 & 非聚簇索引聚簇索引非聚簇索引 索引创建原则 索引 可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 索引的创建 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查…

MySQL 数据库--索引

目录 前言 一、索引及分类 1.索引的概念 2.索引的作用 3.索引的副作用 4.索引的分类 4.1 普通索引 4.2 唯一性索引 4.3 主键索引 4.4 全文索引 4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引 1.准备 2.创建索…

MYSQL数据库-索引

MYSQL数据库-索引 零、前言一、索引概念二、认识磁盘三、理解索引1、如何理解Page2、B vs B3、聚簇索引 VS 非聚簇索引4、普通索引5、总结 四、索引操作1、创建索引2、查询索引3、删除索引 零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值&a…

MySQL数据库:索引

一、索引简介 1.概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 相当于是给数据库中的数据建立了一个目录,通过目录可以知道…

MySQL数据库的索引

文章目录 一、索引是什么?索引的作用 二、索引的使用查看索引创建索引删除索引 三、索引的底层 一、索引是什么? 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型&a…

Mysql数据库索引详解

一、前言 随着我们业务量不断的增大,会发现查询数据库的时间变的越来越长,其实就是数据库到达了性能的瓶颈,这时候需要我们对其进行优化操作,可能我们第一时间就会想到:加索引。没错,这是优化的一个方向&a…

MySQL 数据库--索引(理论详解及实例演示)

文章目录 前言一、索引及分类1.索引的概念2.索引的作用3.索引的副作用4.索引的分类4.1 普通索引4.2 唯一性索引4.3 主键索引4.4 全文索引4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引1.准备2.创建索引的方法2.1 创建普通索…

数据库-mysql之索引

目录 1、索引简介 1.1 索引的含义和特点 1.2 索引的分类 1、普通索引 2、唯一性索引 3、全文索引 4、单列索引 5、多列索引 6、空间索引 1.3 索引的设计原则 1.选择唯一性索引 2.为经常需要排序、分组和联合操作的字段建立索引 3&#xff0…

web前端页面开发工具的演进史

小编是一位有着6年前端开发经验的web前端开发工程师&#xff0c;今天小编从个人的视角来聊一聊web前端开发工具的演进史。 小编第一次接触 web前端开发是在2011年&#xff0c;那会还在上高中。当时正是大家都每天忙碌着装扮自己的QQ空间。那时的web前端布局还是以 <table&g…

关于Webpack前端工程化构建,你必须要掌握这些核心知识点

引言 在很久之前&#xff0c;模块化管理还没有出现&#xff0c;如果我们开发一个页面想要引入一些依赖的话&#xff0c;最常见的做法就是将依赖文件引入到.html文件中。比如&#xff0c;我们要使用JS的一些依赖库&#xff0c;就要在.html文件中使用<script>标签引用&…

构建工具 Vite、Webpack、Rollup对比

Webpack介绍 热更新方面&#xff1a;webpack支持HMR&#xff0c;但是webpack需要全部重新编译并更新&#xff0c;效率较低tree-shaking&#xff1a;webpack2开始支持且消除效果不好&#xff0c;但是webpack5有更好的tree-shaking&#xff08;去除未使用代码&#xff09;分包方…

前端三大构建工具 Webpack、Vite、Rollup 优劣势及原理分析

在刚刚结束的 VueConf2021 中&#xff0c;除了 Vue 3.0 以外&#xff0c;另外一个亮点就是下一代构建工具 Vite 了。 在尤雨溪分享的【 Vue 3 生态进展和计划】的演讲中&#xff0c;尤大神还特意提到 Vite 将成为 Vue 的现代标配。甚至最近新推出的 Petite Vue 从开发、编译、发…

从Npm Script到Webpack,6种常见的前端构建工具对比

从Npm Script到Webpack&#xff0c;6种常见的前端构建工具对比 小编说&#xff1a;历史上先后出现了一系列构建工具&#xff0c;它们各有优缺点。由于前端工程师很熟悉JavaScript&#xff0c;Node.js又可以胜任所有构建需求&#xff0c;所以大多数构建工具都是用Node.js开发的。…

前端开发入门:前端构建工具百度FIS

FIS是什么&#xff1f; FIS全称为Front-end Integrated Solution&#xff0c;即前端集成解决方案。前端团队发展大多会经历规范设计、技术选型、系统拆分、性能优化等阶段&#xff0c;其中的技术需求可以总结为前端集成解决方案。FIS是专为解决前端开发中自动化工具、性能优化…

前端工程化——构建工具选型

一、什么是前端工程化 前端工程化是依据业务特点&#xff0c;将前端开发的规范、流程、技术、工具、经验等形成规范并建立成一种标准的体系。 二、为什么要前端工程化 实现前端工程化的目的简单来说就是通过流程规范、自动化工具来提升前端的开发效率、性能、质量、多人协作…

前端构建工具与应用程序测试

1、前端构建工具 什么是前端构建&#xff1f; 什么是构建工具&#xff1f; 自动构建工具 Npm Scripts&#xff08;推荐&#xff09; Npm Scripts&#xff08;NPM脚本&#xff09;是一个任务执行者。NPM是安装Node时附带的一个包管理器&#xff0c;Npm Script 则是 NPM 内置…

前端构建工具gulp的详细介绍以及使用

什么是 gulp为什么要用 gulp如何使用 gulp Installing Gulp Install the gulp commandInstall gulp in your devDependencies Create a gulpfileTest it out gulp API 什么是 gulp gulp 是一个前端构建工具&#xff0c;它能通过自动执行常见任务&#xff0c;比如编译预处理 CS…

去中心化的前端构建工具 — Vite

为什么要使用Vite 在浏览器中提供ES模块之前&#xff0c;开发人员没有以模块化方式编写JavaScript的本机机制。这就是为什么我们都很熟悉“捆绑”的概念:使用工具来抓取、处理和连接源模块到可以在浏览器中运行的文件中。 随着时间的推移&#xff0c;我们看到了webpack、Roll…