大家好,本文主要讲MySQL数据库的索引的详细讲解。有兴趣的同学过来看看。如果对你有帮助,记得收藏起来下次浏览。
目录
一、MySQL索引介绍二。MySQL索引的五种类型详解(一)通用索引(二)唯一索引(三)主键索引(四)复合索引(五)全文索引(三)。MySQL索引使用原则总结今天,我们将继续为大家介绍MySQL相关知识。本文主要内容是MySQL索引相关内容。
一、MySQL索引简介
索引是MySQL数据库为了加快数据查询速度,在表中的一列或几列上添加的一种“目录”。MySQL的索引是一个特殊的文件,但是InnoDB类型引擎(我们将在以后的文章中解释MySQL的引擎)的表的索引是表空间的一个组成部分。
MySQL数据库总共支持五种类型的索引,分别是普通索引、唯一索引、主键索引、复合索引和全文索引。下面,我将逐一介绍这四类指数。
二、MySQL五种类型索引详解
(一)普通索引
普通索引是MySQL数据库中的普通索引。普通索引增加列对数据没有特殊要求,普通索引的作用是加快较差的查询。
创建数据表时添加公共索引SQL语句示例如下:
创建表exp(id int,name varchar(20),index exp _ name(name));
或者用键替换索引,如下所示:
create table exp (id,int,name varahcr (20),key exp _ name(name));
在上面的SQL命令中,key或index表示添加一个索引,后面是索引的名称,后面是要添加到括号中的列。
除非另有说明,本文中介绍的所有与索引相关的SQL语句都可以用key替换。为了节省文章篇幅,这一点以后不再赘述。
此外,我们还可以在不指定索引名称的情况下添加索引。在这种情况下,MySQL会自动向索引中添加一个与该字段同名的索引名。
执行结果如下:
创建数据表后向表添加公共索引SQL语句示例如下:
alter table exp add index exp _ id(id);
执行结果如下:
创建数据表后删除公共索引的SQL语句示例如下:
alter table drop index exp _ name
执行结果如下:
注意,在上面的命令中,exp_name是索引的名称,而不是包含索引的字段的名称。如果我们忘记了该表中的索引名称,我们可以执行以下SQL命令输入查询:
从exp显示索引;
其中exp是表名,该命令的执行结果如下:
从上面的图片可以看出,添加了一个公共索引后,用desc查看表结构时,会发现MUL出现在Key列上,也就是说这个列添加了一个公共索引。
(二)唯一性索引
唯一索引基于公共索引,添加了索引的列的所有值只能出现一次。唯一索引常用词添加在注入的ID号、学号等字段,不添加在注入的姓名等字段。
唯一索引的添加与普通索引几乎相同,只是普通索引的关键字key和index被唯一键和唯一索引所取代。
创建数据表时添加唯一索引的SQL语句示例如下:
创建表exp (id int,name varchar(20),unique key(name));
上述命令的执行结果如下:
可以看出,对于添加了唯一索引的字段,当使用desc命令查询表结构时,Key列会显示UNI,表示该字段添加了唯一索引。
创建数据表后添加唯一索引的SQL语句示例如下:
删除唯一索引的SQL语句示例如下:
alter table exp drop索引名称;
执行结果如下:
(三)主键索引
主键索引是数据库中所有索引中速度最快的查询,每个数据表只能有一个主键索引列。主键索引的列不允许有重复数据或空值。
添加和删除主键索引与普通索引和唯一索引非常相似,只是键被替换为主键。相关的SQL命令如下:
创建表exp(id int,name varchar(20),primary key(id));alter table exp add primary key(id);
对于添加了主键索引的列,当desc查看表结构时,PRI将显示在键列上,如下图所示:
主键索引的删除可以执行命令:
alter table exp drop主键;
注意,在这个SQL语句中,key不能用index替换。
有时候,当我们试图删除主键索引时,MySQL会拒绝它。这可能是因为该字段添加了auto_increment属性。我们可以通过删除字段修饰符来删除该字段的主键索引,如下所示:
(四)复合索引
如果您想创建一个包含不同列的索引,我们可以创建一个匹配的索引。事实上,复合索引经常在业务场景中使用。比如我们要记录数据包的内容,就需要用IP和端口号作为识别数据包的依据。此时,我们可以创建IP地址和端口号列作为复合索引。用于复合、添加和删除索引创建的SQL语句示例如下:
创建表exp (ip varchar(15),port int,primary key (ip,port));
alter table exp add pimary key(IP,port);
更改表exp dorp主键;
复合索引创建后,使用desc查看数据表结构时,会发现Key列中有多个PRI,也就是说这些包含PRI的列就是复合索引的列。如下所示:
注意,复合索引相当于一个多列主键索引,所以任何添加了复合索引的列都不允许数据为空,这些列也不允许数据相同,否则MySQL数据库会报错。如下所示:
(五)全文索引
全文索引主要用于解决大数据量情况下的模糊匹配问题。如果数据库中一个字段的数据量非常大,如果我们要使用like通配符进行搜索,会非常慢。针对这种情况,我们可以使用全文索引来加快模糊查询的速度。全文索引的原理是通过分词技术分析本地文本中的关键词及其出现频率,依次建立索引。全文索引的使用与数据库版本、数据表引擎甚至字段类型密切相关。主要限制如下:
1.只有MySQL3.2版以后才支持全文索引。
2.MySQL 5.7版以后,MySQL内置了ngram插件,全文索引开始支持中文。
3.在MySQL5.6之前,只有MyISAM引擎支持全文索引。
4.MySQL5.6之后,MyISAM引擎和InnoDB引擎都支持全文索引。
5.只有字段数据类型为char、varchar和text的字段才能支持添加全文索引。
用于创建、添加和删除全文索引的SQL命令如下:
create table exp (id int,content text,fill text key(content))engine=MyISAM;
alter table exp add全文索引(内容);
alter table exp drop索引内容;
一些实施结果如下:
全文索引创建后,不能使用like通配符进行模糊查询。全文索引有其特定的语法,如下所示:
select * from exp where match(content)again(' a ');
其中,match后面的括号是有全文索引的字段,against后面的括号是要模糊匹配的内容。
此外,全文索引的作用不是唯一的。在很多场景下,我们不会使用MySQL数据库内置的全文索引,而是使用第三方的类似索引来实现同样的功能。
三、MySQL索引使用原则
1.索引是典型的“空间换时间”策略,会消耗计算机存储空间,但会加快查询速度。
2.索引的加入,虽然加快了查询速度,但是会减慢插入和删除的速度。因为在插入和删除数据时需要额外的索引操作。
3.索引越多越好。当数据量很小时,不需要添加索引。
4.如果一个表的值需要频繁插入和修改,就不适合索引。相反,如果表中某个字段的值需要频繁地查询、排序和分组,则需要对该字段进行索引。
5.如果一个字段满足建立唯一索引的条件,就不要建立公共索引。
总结
本文关于MySQL数据库索引的详细讲解到此为止。关于MySQL index的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。