第40讲:MySQL索引的语法以及基本使用
创始人
2024-04-12 00:56:53
0

文章目录

    • 1.索引的使用语法
    • 2.索引的基本使用
      • 2.1.准备一张数据表
      • 2.2.按照如下需求为表中的字段创建索引
      • 2.3.查看创建的索引
      • 2.4.删除索引
    • 3.验证使用索引前后的执行效率

1.索引的使用语法

1)创建索引

创建索引时,如果不指定索引的类型,默认就是常规索引,如果同时在一个索引中指定了多个字段,那么这个索引就是多字段的联合索引。

CREATE [UNIQUE | FULLTEXT] INDEX {index_name} ON {table_name} (字段1,字段2)

2)查看索引

SHOW INDEX FROM 表名

3)删除索引

DROP INDEX index_name ON 表名

2.索引的基本使用

2.1.准备一张数据表

准备一张员工信息表,用于索引的使用。

1)创建表

CREATE TABLE tb_user (id INT PRIMARY KEY auto_increment COMMENT '主键',xm VARCHAR ( 50 ) NOT NULL COMMENT '姓名',lxfs VARCHAR ( 11 ) NOT NULL COMMENT '联系方式',yx VARCHAR ( 100 ) COMMENT '邮箱',zy VARCHAR ( 11 ) COMMENT '专业',nl TINYINT UNSIGNED COMMENT '年龄',xb CHAR ( 1 ) COMMENT '性别:1表示男  2表示女',zt CHAR ( 1 ) COMMENT '状态:1表示在职  2表示离职',rzsj date COMMENT '入职时间' 
) COMMENT '人员信息表';

2)准备数据

INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '余伟', '13401004368', 'yuwei@jiangxl.com.cn', '软件工程', 37, '1', '1', '2009-02-02' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '江睿基', '13900090963', 'jiangruiji@jiangxl.com.cn', '网络工程', 31, '1', '1', '2017-01-01' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '张希', '15101030779', 'zhangxi@jiangxl.com.cn', '网络工程', 28, '1', '1', '2020-12-05' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '张子云', '18301006454', 'zhangziyun@jiangxl.com.cn', '软件工程', 35, '1', '1', '2017-10-12' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '陈国明', '15201254765', 'chenguoming@jiangxl.com.cn', '软件工程', 27, '1', '1', '2016-09-15' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '王蕊蕊', '18800005497', 'wangruirui@jiangxl.com.cn', '软件工程', 31, '2', '1', '2018-10-23' );
INSERT INTO tb_user ( xm, lxfs, yx, zy, nl, xb, zt, rzsj ) VALUES ( '牛泽阳', '18701176856', 'niuzeyang@jiangxl.com.cn', '软件工程', 20, '1', '1', '2018-10-31' );

3)数据准备就绪

image-20220529132852869

2.2.按照如下需求为表中的字段创建索引

创建索引的规则:表中频繁查询的字段要设置索引,提高查询的效率。

1)为xm字段创建一个常规索引,查姓名的频率也比较高。

create后面不能任何参数默认创建的就是常规索引。

create index idx_user_xm on tb_user (xm);

2)为lxfs字段创建一个唯一索引,不允许有重复值。

唯一索引要在create后面加上unique参数。

create unique index idx_user_lxfs on tb_user (lxfs);

3)为zy、nl、zt等字段创建联合索引。

联合索引就是在常规索引的基础上,一个索引中同时增加了多个字段。

create index idx_user_zy_nl_zt on tb_user (zy,nl,zt);

在联合索引中,同时增加多个字段时,字段顺序是有讲究的。

如下图所示,这是查询表中的索引信息,可以看到有一列是seq_in_index,这一列表示索引字段的顺序,可以看到其他索引的这个字段都是1,表示这些索引只有一个字段,而在idx_user_zy_nl_zt这个索引有三条记录,且seq_in_index一列的值分被是1、2、3,这也就说明了当索引指定了多个字段时,就有相应的顺序。

image-20220529133749734

4)为yx字段创建常规索引,提高查询效率。

create index idx_user_yx on tb_user (yx);

2.3.查看创建的索引

show index from tb_user;
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name          | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| tb_user |          0 | PRIMARY           |            1 | id          | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| tb_user |          0 | idx_user_lxfs     |            1 | lxfs        | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| tb_user |          1 | idx_user_xm       |            1 | xm          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| tb_user |          1 | idx_user_zy_nl_zt |            1 | zy          | A         |           2 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| tb_user |          1 | idx_user_zy_nl_zt |            2 | nl          | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| tb_user |          1 | idx_user_zy_nl_zt |            3 | zt          | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| tb_user |          1 | idx_user_yx       |            1 | yx          | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
7 rows in set (0.01 sec)

image-20220529133521363

Table一列表示索引属于哪张表。

Key_name是索引的名称,如果一个索引指定了多个字段,则会显示多行数据,如idx_user_zy_nl_zt这个索引。

seq_in_index是索引字段的顺序,如果一个索引中只有一个字段,那么只会显示1,如果有多个字段,则会有显示顺序。

Column_name是索引的字段。

Index_type是索引的数据结构,InnoDB引擎默认都是B+Tree数据结构。

2.4.删除索引

drop index idx_user_yx on tb_user;

3.验证使用索引前后的执行效率

dabiao这张表中name字段是没有添加索引的,下面以name字段为查询条件,来验证没有添加索引前的执行效率。

select * from dabiao where name = '江睿基';

查询耗时大概是2.442秒。

image-20220530215743666

下面为name字段添加索引,然后再来验证添加索引后,查询的效率如何。

create index idx_dabiao_name on dabiao (name);

再次执行相同的SQL观察执行的效率。

mysql> select * from dabiao where name = '江睿基'\G;
······
1 row in set (0.01 sec)

效率有了非常明显的提升,执行总耗时为0.01。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...