第40讲:MySQL索引的语法以及基本使用

news2024/12/23 4:02:07

文章目录

    • 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极简示例揭示 SwiftUI 中 @ObservedObject 与 @StateObject 状态的关键区别

问题现象 话说在 SwiftUI 中视图是状态的函数,这话一点都不假。正是秉性各异的各种状态构成了 SwiftUI 视图千变万化的功能。 这里,我们将为大家揭开其中两个常用状态,即 @ObservedObject 与 @StateObject 状态之间的最关键不同,并带领大家绕过实际使用中可能出现的坑: …

秋染田野稻菽飘香 国稻种芯·中国水稻节:河北各地农业丰收

秋染田野稻菽飘香 国稻种芯中国水稻节:河北各地农业丰收 河北日报 (记者郝东伟) 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道&#x…

JavaIO流:模型

IO 的字面意思是读/写数据,IO 模型是读/写数据的方式。常用到的读/写数据方式有:同步阻塞 IO、同步非阻塞 IO、IO 多路复用、信号驱动、异步 IO ~ 本篇内容包括:Java IO 与 IO 模型、五种 IO 模型、三种 Java IO 模型。 文章目录一…

计算机组成原理期末复习第三章-2(唐朔飞)

计算机组成原理期末复习第三章-2(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&am…

电子元器件企业面临缺货涨价,SRM协同系统助力企业采购数字化智慧升级

近年来,在移动互联网技术不断发展、消费电子产品制造水平提高和居民收入水平增加等因素的驱动下,电子元器件行业呈现蓬勃发展的态势。未来随着5G、物联网、人工智能、虚拟现实、新型显示等新兴技术与消费电子产品的融合,这会使得行业需求量持…

linux进程间通信-FIFO,让你全方位理解

有名管道(FIFO) 有名管道也被称为FIFO文件,是一种特殊的文件。由于linux所有的事物都可以被视为文件,所以对有名管道的使用也就变得与文件操作非常统一。 (1)创建有名管道 用如下两个函数中的其中一个,可以创建有名管道。 #include #include …

python项目上线

python项目上线一 购买服务器二 使用MobaXterm连接服务器三 上线图四 安装git五 安装mysql六 安装redis七 安装python八 安装uwsgi九 安装虚拟环境十 安装nginx十一 前端部署十二 后端部署12.1 git拉取代码,安装依赖12.2 配置数据库12.3 迁移数据库12.4 使用uwsgi启…

作为微软开发者官方号,我们又要做点特别的事情了

在“感谢”二字最容易说出口的日子 谢谢每一个你,像一颗颗星星一样 点亮 MSDN 微软开发者社区的技术宇宙 我们也将在这个最值得感谢的日子 做一点特别的事情 MSDN 到底什么来头? MSDN 微软开发者社区已经成立快10年了,相信有很多资深开发…

Android服务器的通信方式

目录 一.HTTP协议 1.简介 2.Get和Post的使用 1.Get请求 2.Post请求 3.Get请求和Post请求的区别 二.Socket Socket的使用类型主要有两种: 客户端: 三.Socket 与 Http 对比 Android与服务器的通信方式主要有两种,一是Http通信&#xf…

Docker安装Gitlab-ruuner

第一步 # 拉取镜像 docker pull gitlab/gitlab-runner:latest # 启动容器 docker run -d --name gitlab-runner --restart always -v /opt/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest 第二步 查看/…

Windows 上修改 docker 的镜像文件存储位置(修改 WSL 文件映射)

Windows 上修改 docker 的镜像文件存储位置(修改 WSL 文件映射)1、起因2、修改2.1 关闭 Docker Desktop2.2 备份镜像2.3 WSL 取消注册 docker-desktop-data2.4 镜像数据导回 WSL 并挂载到新路径3、验证1、起因 一开始在 Windows 上安装了 docker 后&…

运动用品品牌排行榜,2022年值得买的运动用品推荐

如今,人们的生活节奏越来越快,工作和生活压力大。因此,人们越来越重视体育运动,通过体育运动达到放松和锻炼身体的目的,运动装备也就跟着火热起来。无论是进行室内或户外活动,选一套合适的运动装备是很有必…

【java】java 类型安全 与 unchecked warning

1.概述 1.1. What does type-safety mean? 我的总结: 从概念上来说,Type Safety,最本质上,就是对于内存(Memory)的“正确访问”。假如说,在内存的一块区域上存储着一个String类型的对象;按照正常的逻辑,这块内存区域就应该被当作String来进行处理,这就是所谓的“…

MASA Framework 事件总线 - 进程内事件总线

概述 事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点 松耦合横切关注点可测试性事件驱动 发布订阅模式 通过下图我们可以快速了解发布订阅模式的本质 订阅者将自…

nginx简单学习笔记

目录什么是nginx?反向代理负载均衡动静分离安装nginxNginx常用命令nginx.conf配置文件1、位置2 nginx配置文件组成Nginx 反向代理实例Nginx 配置实例-负载均衡nginx 分配服务器策略Nginx配置实例-动静分离nginx原理什么是nginx? Nginx是一个高性能的 HT…

【附源码】计算机毕业设计JAVA医院住院综合服务管理系统

【附源码】计算机毕业设计JAVA医院住院综合服务管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: …

第五站:操作符(第一幕)

操作符相关的知识,在我们初识C语言(第三幕)这篇文章中其实已经讲到过了。但是那一次讲解仅仅只是一些粗略的知识讲解,我们在那里面已经提到过,后续会专门超级详细的讲解操作符的知识,我们现在就来攻下操作符…

2022亚太数学杯数学建模竞赛B题(思路、程序......)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

C妈妈加密返回值逆向分析

内容仅供参考学习 目标 网址:https://www.chanmama.com/promotionDetail/0IHXaJ1y7lRNaZyiTsKa6vHtvaZDe6zy/live 直播记录接口返回值加密 分析 打开调试工具,先截获一个请求: 进入Initiator 一般情况通过这边进入函数中挨着…

HTML CSS游戏官网网页模板 大学生游戏介绍网站毕业设计 DW游戏主题网页模板下载 游戏娱乐网页成品代码

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…