千家信息网

MySQL数据库中索引有什么用

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章将为大家详细讲解有关MySQL数据库中索引有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、MySQL索引简介索引是MySQL数据库为了加快数据查询
千家信息网最后更新 2025年01月17日MySQL数据库中索引有什么用

这篇文章将为大家详细讲解有关MySQL数据库中索引有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、MySQL索引简介

索引是MySQL数据库为了加快数据查询的速度,给表中的某一个或者是某几个列添加的一种"目录"。MySQL的索引是一个特殊的文件,但是InnoDB类型引擎(关于MySQL的引擎我们会在今后的文章中进行讲解)的表的索引是表空间的一个组成部分。
MySQL数据库一共支持5种类型的索引,分别是普通索引、唯一性索引、主键索引、复合索引和全文索引,下面,我将对这四种类型的索引一一介绍。

二、MySQL五种类型索引详解

(一)普通索引

普通索引是MySQL数据库中的一种普通的索引,添加普通索引的列对数据没有特殊要求,普通索引能起到的作用就是加快差查询速度。
在创建数据表时添加普通索引SQL语句示例如下:

create table exp(id int , name varchar(20),index exp_name(name));

或者是把index换成key,如下:

create table exp (id ,int , name varahcr (20) ,  key exp_name(name));

在上述SQL命令中,key或者index表示添加索引,后面紧跟着的是索引名称,后面括号里的是要添加索引的列。
本文介绍的所有索引相关的SQL语句,如果没有特殊说明,index都可以换成key,为了节省文章篇幅,这一点在以后就不再赘述了。
此外,我们也可以在添加索引时,不指定索引的名称,这时,MySQL会自动为该索引添加与该字段同名的索引名。
执行结果如下:

创建数据表后向表内新添加普通索引SQL语句示例如下:

alter table exp add index exp_id(id);

执行结果如下:

创建数据表后删除普通索引的SQL语句示例如下:

alter table drop index exp_name;

执行结果如下:

注意,在上述命令中,exp_name是索引的名字而不是含有索引的字段的名字,如果我们忘记了该表中的索引名称,可以执行以下SQL命令进项查询:

show index from exp;

其中,exp是表名,该命令执行结果如下:

从上面几张图片可以看出,添加普通索引后,在使用desc查看表结构时,会发现Key列上出现MUL,这就表示该列添加有普通索引。

(二)唯一性索引

唯一性索引,是在普通索引的基础上,要求添加该索引的列所有的值只能出现一次。唯一性索引常用语添加在注入身份证号、学号等字段中,不可以添加在注入名字、等字段中。
唯一性索引的添加与普通索引几乎完全相同,只不过要把普通索引的关键字key和index换成unique key和unique index。
在创建数据表时添加唯一性索引的SQL语句示例如下:

create table exp (id int, name varchar(20), unique key (name));

上述命令执行结果如下:

可以看出,添加唯一性索引的字段,在使用desc命令查询表结构时,Key列中会显示UNI,表示该字段添加了唯一性索引。
在创建数据表后添加唯一性索引的SQL语句实例如下:

删除唯一性索引的SQL语句示例如下:

alter table exp drop index name;

执行结果如下:

(三)主键索引

主键索引,是数据库的所有索引中查询速度最快的,并且每个数据表只能有1个主键索引列。主键索引的列,不允许出现重复的数据,也不允许为空值。
添加、删除主键索引与普通索引和唯一性索引非常相似,只不过将key换成了primary key而已。相关SQL命令如下:

create table exp(id int ,name varchar(20), primary key (id));alter table exp add primary key (id);

添加了主键索引的列,会在desc查看表结构时Key列上显示PRI,如下所示:

主键索引的删除可以执行命令:

alter table exp drop primary key;

注意,在该SQL语句总,key不能换成index。
有时,我们在尝试删除主键索引时,MySQL后拒绝,这可能是因为该字段添加了auto_increment属性的缘故,我们可以把该字段修饰符删除,就可以删除该字段的主键索引了,如下所示:

(四)复合索引

如果想要创建一个包含不同的列的索引,我们就可以创建符合索引。其实,复合索引在业务场景中应用的非常频繁,比如,如果我们想要记录数据包的内容,则需要将IP和端口号作为标识数据包的依据,这时就可以把IP地址的列和端口号的列创建为复合索引。复合、添加和删除索引创建SQL语句示例如下:

create table exp (ip varchar(15),port int ,primary key (ip,port));alter table exp add pirmary key(ip ,port);alter table exp dorp priamary key;

复合索引在创建后,在使用desc查看数据表结构时,会在Key列中发现多个PRI,这就表示这些含有PRI的列就是复合索引的列了。如下所示:

注意,复合索引相当于一个多列的主键索引,因此,添加复合索引的任何一个列都不允许数据为空,并且这些列不允许数据完全相同,否则MySQL数据库会报错。如下所示:

(五)全文索引

全文索引主要是用于解决大数据量的情况下模糊匹配的问题。如果数据库中某个字段的数据量非常大,那么如果我们想要使用like+通配符的方式进行查找,速度就会变得非常慢。针对这种情况,我们就可以使用全文索引的方式,来加快模糊查询的速度。全文索引的原理便是通过分词技术,分析处文本中关键字及其出现的频率,并依次建立索引。全文索引的使用,与数据库版本、数据表引擎乃至字段类型息息相关,主要限制如下:
1、MySQL3.2版本以后才支持全文索引。
2、MySQL5.7版本以后MySQL才内置ngram插件,全文索引才开始支持中文。
3、MySQL5.6之前的版本,只有MyISAM引擎才支持全文索引。
4、MySQL5.6以后的版本,MyISAM引擎和InnoDB引擎都支持全文索引。
5、只有字段数据类型为char、varchar、以及text的字段才支持添加全文索引。
创建、添加以及删除全文索引SQL命令如下:

create table exp (id int ,content text ,filltext key (content))engine=MyISAM;alter table exp add fulltext index (content);alter table exp drop index content;

部分执行结果如下:

在创建了全文索引后,也不能够使用like+通配符的方式进行模糊查询,全文索引的使用有其特定的语法,如下所示:

select * from exp where match(content) against ('a');

其中,match后面的括号里是含有全文索引的字段,against后面的括号里是要模糊匹配的内容。
此外,全文索引的作用并不是唯一的,在很多场景下,我们并不会使用MySQL数据库内置的全文索引,而是使用第三方类似的索引以实现相同的功能。

三、MySQL索引使用原则

1、索引是典型的"以空间换时间"的策略,它会消耗计算机存储空间,但是会加快查询速度。
2、索引的添加,尽管加快了在查询时的查询速度,但是会减慢在插入、删除时的速度。因为在插入、删除数据时需要进行额外的索引操作。
3、索引并非越多越好,数据量不大时不需要添加索引。
4、如果一个表的值需要频繁的插入和修改,则不适合建立索引,反制,如果一个表中某个字段的值要经常进行查询、排序和分组的字段则需要建立索引。
5、如果一个字段满足建立唯一性索引的条件,就不要建立普通索引。

关于"MySQL数据库中索引有什么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

索引 数据 全文 字段 普通 唯一性 查询 数据库 命令 语句 数据表 速度 结果 引擎 示例 类型 支持 版本 结构 特殊 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安软件开发定制公司有哪些 南京软件开发公司 将于 数据库不设置主键默认 数据库如何自动导入数据库 湖北企业党建软件开发系统 网络技术安全防范 软件开发职业认知报告 自建poi查询服务器 整理网络技术中的英文简称 网络技术的发展推动了的变化 防御各种攻击服务器 软件开发服务费加计扣除吗 国网物资网络安全新闻 梁溪区机电软件开发技术参数 数据库怎么插入一列数据 网络安全龙头300311 万谷盛世互联网科技 计算机网络技术专业很难学吗 从事软件开发行业到底怎么样 最近国家取得的网络安全的成就 企业管理软件开发所需ui 10大网络技术 域控制器服务器管理 无极数据库编辑器免费下载 当前主流服务器 文件字符串提取软件开发 确保数据库数据独立性 数据库固定资产管理系统课设代码 深圳市互联网金融网络科技有 如何进行财务报账软件开发
0