MySQL数据库的索引是什么

深入理解MySQL数据库索引 MySQL的索引是一种数据结构它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。MySQL索引类似于书籍的目录,通过指向数据行的位置,**可以快速定位和访问表中的数据。**就像使用汉语字典的目录(索引)页,可以通过笔画、偏旁部首、拼音等排序的目录快速查到所需要的字。索引应该创建在高频查询的列上。索引需要占用额外的存储空间 – 每一个索引都会生成对应的一个索引树。 阅读详情

索引的概念

  • 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。

  • 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。

  • 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。

  • 索引是表中一列或者若干列值排序的方法。

  • 建立索引的目的是加快对表中记录的查找或排序。(加快查询速度、对字段值进行排序)

索引的作用

  • 设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。

  • 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。

  • 可以降低数据库的I/O成本,并且索引还可以降低数据库的排序成本。

  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。

  • 可以加快表与表之间的连接。

  • 使用分组和排序时,可大大减少分组和排序的时间。

  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能。

创建索引的原则依据

索引虽可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。

  • 表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。

  • 记录数超过300行(或500行)的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。(会影响IO和CPU的性能)

  • 经常与其他表进行连接的表,在连接字段上应该建立索引。

  • 唯一性太差的字段不适合建立索引。(因为字段值会有重复)

  • 更新太频繁地字段不适合创建索引。

  • 经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。

  • 在经常进行GROUP BY、ORDER BY的字段上建立索引。

  • 索引应该建在选择性高的字段上。(即重复性低的字段)

  • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。(大字段建索引会增加磁盘空间,而且搜索起来会影响性能)

注:

当一个表写入多、读取很少的时候,不需要建立索引。

唯一性太差的字段、更新太频繁地字段、大字段,不适合做索引。

索引的分类和创建

创建一个表

​

直接创建索引

CREATE INDEX 索引名 ON 表名 (列名(length)); 复制代码

​

索引就相当于一个键:

​

以修改表的方式创建索引

ALTER TABLE 表名 ADD INDEX 索引名(列名); ​ 示例: ALTER TABLE class ADD INDEX phone_index(phone); #以phone字段创建普通索引 复制代码

​

删除索引:

drop index name_index on class; #直接删除索引 ​ drop index zhanli_index on class; #直接删除索引 ​ alter table class DROP index phone_index; #以修改表的方式删除索引 复制代码

​

​

唯一索引(创建唯一键即创建唯一索引)

唯一索引:与普通索引类似,但区别是唯一索引列的每个值都唯一。 唯一索引 允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

创建唯一键或者创建唯一索引都可实现。

CREATE UNIQUE INDEX 索引名 ON 表名(字段名); ​ 示例: create unique index phone_index on class(phone); 复制代码

​

以修改表的方式创建

ALTER TABLE 表名 ADD UNIQUE 索引名(字段名); ​ 示例: alter table class add unique phone_index(phone); 复制代码

添加唯一键

添加唯一键将自动创建唯一索引。

主键索引(和创建主键的方式一样)

主键索引是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。

create table 表名(字段1 XXX, 字段2 XXX, ...primary key(字段)); create table 表名(字段1 XXX primary key, ...); #将主键作为字段1的属性 ​ ​ 示例: create table room(id int(10),name varchar(10),primary key(id)); ​ create table room2(id int(10) primary key,name varchar(10)); 复制代码

​

在现有表中添加主键

ALTER TABLE 表名 add primary key(字段名); ​ ​ 示例: ALTER TABLE class add primary key(id); #将id字段添加为主键 复制代码

​

组合索引(单列索引与多列索引)

组合索引(单列索引与多列索引):可以是单列上创建的索引,也可以是在多列上创建的索引。

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

CREATE INDEX 索引名 on 表名(字段1,字段2,字段3); ​ 示例: create index name_phone_index on room4(name,phone); #使用3个字段创建组合索引 复制代码

​

修改表的方式创建索引

alter table 表名 add index 索引名(字段1,字段2, ..., 字段n); ​ 示例: alter table room5 add index phone_name_index(phone,name); 复制代码

​

使用组合索引查询:

使用select查询时注意where的最左原则。查询字段的顺序要和组合索引保持一致,才能生效。

select * from 表名 where 字段1=XXX and 字段2=XXX and ...; 复制代码

select * from room4 where name='lisi' and phone=138; ##这条查询语句,会使用到name_phone_index这个索引。 select * from room4 where phone=158 and name='王五'; ##这条查询语句无法使用索引,因为查询字段的顺序和组合索引不一致。 复制代码

​

全文索引

全文索引(FULLTEXT):适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。

在MySQL5.6版本以前FULLTEXT索引仅可用于MyISAM引擎,在5.6版本之后innodb 引擎也支持FULLTEXT 索引。

全文索引可以在CHAR、 VARCHAR 或者TEXT 类型的列上创建。

每个表一般只创建一个全文索引。

查询时只能匹配完整的单词/字符串。

直接创建索引

create fulltext index 索引名 on 表名 (字段); ​ 示例: create fulltext index remark_index on member(remark); 复制代码

​

​修改表的方式创建索引

alter table 表名 add fulltext 索引名 (字段); ​ 示例: alter table room4 add fulltext address_index(address); 复制代码

​

全文索引的创建限制:

全文索引只能在char、varchar和text类型的字段上创建

使用全文索引查询:

全文索引查询时,只能匹配完整的单词或字符串。

select * from 表名 where match(字段名) against(单词/字符串); ​ 示例: #查询remark字段包含字符串"vip"的数据记录。 select * from room4 where match(address) against('vip'); ​ #查询remark字段包含字符串"vvvip"的数据记录。 select * from room4 where match(address) against('vvvip'); ​ #这条语句查询不到匹配的记录,因为全文索引只能匹配完整的单词/字符串。 select * from room4 where match(address) against('ip'); 复制代码

​

​

使用explain命令分析:

可以使用explain命令分析一下,这个 select语句是否使用了索引或者索引使用是否正确。

explain select * from room4 where match(address) against('vip')\G 复制代码

​

查看表中有哪些索引

show index from 表名; #能查看索引的字段和细节,建议以纵向形式查看 show index from 表名\G #建议使用\G以纵向形式查看 ​ show keys from 表名; show keys from 表名\G ​ show create table 表名; #只能查看索引的字段和名称 复制代码

查询结果中,各字段的含义如下:

字段

含义

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或为空

lndex_type

用过的索引方法(BTREE,FULLTEXT,HASH,RTREE)

comment

备注

删除索引

删除主键索引(即删除主键)

alter table 表名 drop primary key; 复制代码

​

删除其他索引

drop index 索引名 on 表名; #直接删除索引 ​ alter table 表名 drop index 索引名; #修改表的方式删除索引

【数据库】Mysql索引 1.1、索引的含义数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据。索引的实现通常使用B树和变种的B+树(MySQL常用的索引就是B+树)。除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这种数据结构就是索引。简言之,索引就类似于书本,字典的目录。1.2、为什么用索引?打个比方,如果正确合理设计使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 阅读详情

相关推荐

【05】MySQL数据库的索引是什么,怎么用?详解与应用

索引(Index)是数据库中用于加速数据检索的一种数据结构。可以将其看作是书籍中的目录,通过索引可以快速找到相关数据的位置,从而避免全表扫描。在MySQL中,索引主要用于提高查询效率,但也会增加写操作的开销(因为插入、更新和删除数据时也需要更新索引)。索引是数据库性能优化的关键工具,通过合理使用索引可以显著提高查询效率。在使用索引时,要注意选择合适的索引类型,避免过度索引,并根据实际查询需求设计索引。此外,定期分析和优化索引,也是保持数据库高效运作的重要措施。

qq_35320456的博客 1887

MySQL数据库之索引

小张爱学习

在熙丶的博客 845

MySQL索引

MySQL索引

Mr.xing的博客 2104

MySQL数据库:索引

MySQL数据库的索引、索引分类、索引操作介绍

m0_63020222的博客 1075

ADS仿真功率放大器实例学习笔记

ADS仿真功率放大器实例学习笔记

qq_36521926的博客 1万+

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2801

mysql数据库索引

mysql数据库索引,简单总结编写

m0_46192647的博客 5073

Mac版Burp Suite专业版破解与汉化完整指南

在Web安全测试领域,Java应用程序的许可证验证机制与本地化实现是常见的技术课题。其原理通常涉及Java Agent技术,通过在JVM启动时动态修改字节码,实现对软件授权状态的校验逻辑进行拦截与重写,从而绕过官方验证。同时,软件界面的国际化(i18n)与本地化(l10n)则依赖于资源文件的替换与加载。从技术价值角度看,深入理解这些机制不仅能满足特定场景下的工具定制需求,更能加深对Java安全机制、软件保护与逆向工程的理解。在实际的工程实践中,安全研究人员与开发者常面临功能受限或语言障碍的挑战,尤其是在渗透

weixin_29327525的博客 1059

索引表

在我们传统的印象中,索引和表是两个不同的东西。我们总是先创建表,然后根据查询,建立相应的索引。表和索引在物理上属于不同的存储空间。例如你建立了一个好友的通讯录,你经常需要通过指定好友的姓名来查询他的有关信息,为了提高查询的性能(假设你的好友多如牛毛),你可能希望在他们的姓名上建立一个索引,这是一种非常自然的想法。可是,也许有一天你发现,除了上述的...

weixin_34268753的博客 568

Pulpino SoC中挂载AXI从机接口的自定义IP说明

AXI 从机接口挂载 Pulpino SoC 调试Pulpino SoC中挂载AXI从机接口的自定义IP说明PULPion SoC介绍自定义AXI IP挂载IP挂载框图代码修改脚本修改自定义AXI IP调试C语言编写软件调试硬件调试 Pulpino SoC中挂载AXI从机接口的自定义IP说明 本篇文章主要从工程的角度描述了如何将具有AXI从机接口的自定义IP挂载到Pulpino SoC上,其中不涉及到SoC中的任何原理知识。 PULPion SoC介绍 PULPion SoC整体架构如下图所示, PULPi

小陈的芯片学习之路 2212

基于共识的捆绑算法CBBA在多无人机多任务调度中的实现

在捆绑过程中,每个无人机根据自己的任务清单和其他无人机的任务清单,确定一个被称为“束”的集合。通过合理的任务分配和无人机协作,CBBA算法能够实现最优的任务调度,提高了多无人机系统的效率和执行能力。在每一轮迭代中,无人机根据自己的当前任务和位置信息将任务清单发送给其他无人机,并接收其他无人机发送过来的任务清单。通过比较其他无人机的任务清单和自身的任务清单,每个无人机可以更新自己的任务分配情况。在这一步中,每个无人机根据自己选择的新任务,更新自身的任务清单,并将更新后的清单发送给其他无人机。

持续更新 1156

Database学习 - mysql 数据库 索引

索引   索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化最有效的手段了.索引能够轻易将查询性能提高好几个数量级.索引相当于字段的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页查询 索引的特点:   创建与维护索引...

dixian4894的博客 123

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5271

MySQL数据库索引

索引是帮助MySQL 高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引向(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

new9232的博客 2050

RK3588 平台部署实战:OpenCV + LibTorch + FFmpeg 环境搭建与深度学习推理全流程解析

现在,你已经掌握了在RK3588上搭建OpenCV+LibTorch+FFmpeg环境的完整流程,也完成了深度学习模型的部署测试。不妨从一个具体的应用场景入手(如检测自家宠物的品种),亲手打造属于你的第一个边缘智能应用——当你看到模型在RK3588上精准输出结果时,你会发现:嵌入式深度学习的门槛,其实并没有想象中那么高。这些依赖是编译OpenCV、FFmpeg的基础,安装过程中若提示权限不足,可在命令前加。若能输出预测的类别索引,则说明环境搭建成功,模型推理流程通畅。文件,实现模型加载、图像预处理与推理。

FJN110的博客 536

深入解析:武汉光庭信息技术 Android CarPlay 开发岗位的技术要求与面试准备(大连)

武汉光庭信息大连分部招聘Android CarPlay开发工程师,要求专科以上学历及2年以上Android开发经验,需精通CarPlay集成技术与车载系统开发。该职位涉及Android底层框架修改、CarPlay协议实现及车规级系统开发,需处理USB/HID驱动、图形合成等技术难点,并确保通过Apple严格认证。求职者需具备扎实的Android开发能力,熟悉车载环境特殊性,包括系统稳定性保障、人机交互适配等技术要点。文章深度解析了职位技术内涵,并提供面试问题与参考答案,帮助求职者全面准备这一复合型技术岗位。

郑伟强dev的专栏 402

MySQL数据库的常用索引

本文关键字:数据库、MySQL、索引的作用、常用索引。在使用数据库的过程中,经常会进行数据的查询。随着数据量的增大,查询的时间会变的原来越长,这就需要合理的建立索引来提高查询效率。

微光点亮星辰 9975

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL_DB索引&B+树&SQL优化

数据库的索引就像一本书的目录,查数据快人一步,快速定位,精准打击! 什么是数据库的索引?

rookieLin8848的博客 482

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql数据库修改索引_mysql数据库之索引

1 引言在没有索引的情况下,如果要寻找特定行,数据库可能要遍历整个数据库,使用索引后,数据库可以根据索引找出这一行,极大提高查询效率。本文是对MySQL数据库中索引使用的总结。2 索引简介索引是一个单独的、存储自磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。...

weixin_30621659的博客 1451

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MySQL 数据库如何创建索引、索引的语法格式是什么

在数据库中,索引可以提高数据的检索速度;MySQL 数据库提供了三种创建索引的方法:一、使用 CREATE INDEX 语句可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。1.语法格式:CREATE ON ( [] [ ASC | DESC])2.语法说明如下::指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。:指定要创建索引的表名。

momovi的博客 3046

[MYSQL数据库]- 索引

索引由来,索引是怎么实现的,索引的创建,删除和信息的查询

分享技术 2245

mysql数据库之索引

目录一、索引的概念二、索引的的作用三、索引的副作用四、创建索引的原则依据五、哪些场景适合创建索引六、索引的分类及创建准备工作进入数据库并创建库进入库并创建表查看表的格式在表中插入内容并查看表中的内容创建普通索引直接创建索引唯一索引修改表创建方式创建表的时候指定主键索引创建表的时候指定 组合索引全文索引直接创建索引修改表方式创建创建表的时候指定索引查看索引删除索引直接删除索引删除主键索引总结索引分类索引创建Mysql死锁、悲观锁、乐观锁(1)索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所

fengmaohuli的博客 1244

MySQL数据库的索引

索引(Index)是书籍的重要组成部分,它列出了书中的重要名词及其对应的页码,方便读者快速查找这些名词的定义和含义。通过索引,用户无需通读整本书就能迅速找到所需的信息。数据库索引(Database Index)是数据库管理系统中的一种排序数据结构,用于加速查询和更新数据库表中的数据。数据库索引使得数据库程序能够快速定位表中的数据,而无需扫描整个数据库。数据库中有许多种索引。其根据不同的分类方式,分别可以从四个角度概括。这种分类方法帮助我们更好地理解和选择适合的索引类型,以优化数据库性能。

锟斤拷 1649
上一篇: 一个将老系统kafka消费者服务性能提升近百倍的方法
下一篇: 有关MYSQL的22年最新部分面试题汇总
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值