OldWang带你了解MySQL(九)

news2025/1/13 13:32:24

文章目录

    • 🔥MySQL中的索引
    • 🔥MySQL中的索引类型
    • 🔥普通索引
    • 🔥唯一索引
    • 🔥主键索引
    • 🔥组合索引

🔥MySQL中的索引

在这里插入图片描述
索引介绍

索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。索引是一种特殊的文件,它们包含着对数据表里所有记录的位置信息。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。MySQL 索引的建立对于MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。

索引的作用

索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度)。

索引优点:

⭐ 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性;
⭐ 可以加快数据的检索速度;
⭐ 可以加速表与表之间的连接;
⭐ 在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间;

索引缺点
⭐ 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
⭐ 索引需要占用物理空间,数据量越大,占用空间越大;
⭐ 会降低表的增删改的效率,因为每次增删改索引都需要进行动态维护;

什么时候需要创建索引
⭐ 频繁作为查询条件的字段应该创建索引;
⭐ 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找);
⭐ 查询中统计或者分组的字段;

什么时候不需要创建索引
⭐ 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件;
⭐ where条件里用不到的字段,不创建索引;
⭐ 表记录太少,不需要创建索引;
⭐ 经常增删改的表;
⭐ 数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引;

🔥MySQL中的索引类型

⭐ 普通索引:

最基本的索引,它没有任何限制。

⭐ 唯一索引:

索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一。

⭐ 主键索引:

特殊的索引,唯一的标识一条记录,不能为空,一般用primary key来约束。

⭐ 联合索引:

在多个字段上建立索引,能够加速查询到速度。

🔥普通索引

普通索引
是最基本的索引,它没有任何限制。在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。

创建索引时需要注意:
如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。

查询索引

SHOW INDEX FROM table_name;

直接创建索引

CREATE INDEX index_name ON table(column(length));

修改表添加索引

ALTER TABLE table_name ADD INDEX index_name (column(length));

示例:

修改 emp3 表,为 addrees 列添加索引,索引名为 emp3_address_index;

alter table emp3 add index emp3_address_index(address);

创建表时指定索引列

CREATE TABLE table (
COLUMN TYPE ,
PRIMARY KEY (id),
INDEX index_name (column(length))
);

示例:

创建 emp4 表,包含 emp_id,name,address 列, 同时为 name 列创建索引 ,索引名为
emp4_name_index。

create table emp4(emp_id int primary key auto_increment,name
varchar(30),address varchar(50),index emp4_name_index(name));

删除索引

DROP INDEX indexname ON tablename;

示例:

删除 mep3 表中索引名为 emp3_address_index 的索引。

drop index emp3_address_index on emp3;

🔥唯一索引

唯一索引

唯一索引与普通索引类似,不同的就是: 索引列的值必须唯一,但允许有空值。

创建唯一索引

CREATE UNIQUE INDEX indexName ON table(column(length));

示例:

为 emp 表中的 name 创建一个唯一索引,索引名为 emp_name_index。

create unique index emp_name_index on emp(name);

修改表添加唯一索引

ALTER TABLE table_name ADD UNIQUE indexName (column(length));

示例:

修改 emp 表,为 salary 列添加唯一索引,索引名为 emp_salary_index。

alter table emp add unique emp_salary_index(salary);

创建表时指定唯一索引

CREATE TABLE `table` (
COLUMN TYPE ,
PRIMARY KEY (`id`),
UNIQUE index_name (column(length))
);

示例:

创建 emp5 表,包含 emp_id,name,address 列,同时为 name 列创建唯一索引。索引名为
emp5_name_index。

create table emp5(emp_id int primary key ,
name varchar(30),address
varchar(30),unique emp5_name_index(name));

🔥主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

修改表添加主键索引

ALTER TABLE 表名 ADD PRIMARY KEY(列名);

示例:

修改 emp 表为 employee_id 添加主键索引。

alter table emp add primary key(employee_id);

创建表时指定主键索引

CREATE TABLE table (
COLUMN TYPE ,
PRIMARY KEY(column)
);

示例:

创建 emp6 表,包含 emp_id,name,address 列,同时为 emp_id 列创建主键索引。

create table emp6(employee_id int primary key auto_increment,name
varchar(20),address varchar(50));

🔥组合索引

组合索引
组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)。

最左前缀原则

就是最左优先。

如: 我们使用表中的 name ,address ,salary 创建组合索引,那么想要组合索引生效, 我们只能使用如下组合:

name/address/salary
name/address
name/

如果使用 addrees/salary 或者是 salary 则索引不会生效。

添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column(length),column(length));

示例:

修改 emp6 表,为 name ,address 列创建组合索引。

alter table emp6 add index emp6_index_n_a(name,address);

创建表时创建组合索引

CREATE TABLE `table` (
COLUMN TYPE ,
INDEX index_name (column(length),column(length))
);

示例:

创建 emp7 表,包含 emp_id,name,address 列,同时为 name,address 列创建组合索引。

create table emp7(emp_id int primary key auto_increment ,name
varchar(20),address varchar(30),index emp7_index_n_a(name,address));

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

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

相关文章

【C++学习笔记】字符串、向量和数组

字符串类型 1.C语言风格字符串&#xff1a;char 变量名[] "字符串值" 1. char: 字符常量或者单个字符 单引号定义 &#xff1b;字符串常量用 双引号 定义 2. 输出直接用cout char str1[] "hello world"; cout << str1 << endl;2.C语言风格…

Linux环境下 通过V4L2读取视频+UDP发送图片文件

该图为整个项目的流程图 其中左边的流程为总流程&#xff0c;包括通过中断读取摄像头的帧数据&#xff0c;通过内存映射将内核态的数据映射到用户态&#xff0c;读取用户态的数据&#xff0c;采用循环发送图片数据。 右边是发送图片的流程图&#xff0c;将用户态的缓冲区的数…

780E编译底包教程

这里写目录标题 准备1 安装开发环境准备2 拉取编译工程源码 代码编译修改或者增加用户程序说明 准备 1 安装开发环境准备 需要用户自行安装好Xmake\vscode\git 环境教程传送门 2 拉取编译工程源码 注意, 需要两个库 主库 https://gitee.com/openLuat/LuatOS bsp库 https://…

LAMP架构中的网站搭建

前言&#xff1a;本次操作依赖于LAMP的环境已经配置完全&#xff0c;网站也是依赖于开发人员现有的网站包框架&#xff0c;实施在LAMP已搭建好的环境进行安装部署 1. 对mysql进行操作 ——创建数据库&#xff0c;并进行授权 1.创建数据库&#xff0c;并进行授权 mysql -u roo…

Redis6学习

Redis6 1. NoSQL数据库简介 1.1 技术发展 技术的分类 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN。 2、解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis。 3、解决性能的问题&#xff1a;NoSQL、Jav…

国产什么牌子的蓝牙耳机音质好?国产适合听音乐的蓝牙耳机推荐

现如今&#xff0c;蓝牙耳机的性能越来越多&#xff0c;一款蓝牙耳机不可能将各种性能做到极致。大家在选择蓝牙耳机时&#xff0c;无外乎从佩戴、音质、降噪、延迟等因素出发&#xff0c;那么&#xff0c;国产什么牌子的蓝牙耳机音质好&#xff1f;根据这个问题&#xff0c;我…

Docker更换国内镜像源

什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全…

【三十天精通Vue 3】第十二天 Vue 3 的函数式组件详解(过滤器已废弃)

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue3 中的函数式组件1.1 函数式组件的概念和特点1.2 函数…

DolphinDB 计算节点使用指南

导读 为了提升 DolphinDB 在高并发读写场景下的性能与稳定性&#xff0c;DolphinDB 在架构上引入了计算节点 &#xff08;compute node&#xff09; 。计算节点接管了数据节点的部分职能&#xff0c;负责响应客户端的请求并返回结果。在架构层面&#xff0c;将集群的计算与存储…

QT - 布局方式

Qt里面的头文件和类名是一致的&#xff0c;知道头文件就知道类名&#xff0c;反之亦然 Qt头文件是没有.h的&#xff0c;基本都是以大写的Q开头 后续的代码编写都在widget.h和widget.cpp 一. widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget>/*QT系统自己使…

机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析

基于高斯贝叶斯对面部皮肤进行预测分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4…

ROS--机器人小车仿真rviz

URDF练习 需求描述: 创建一个四轮圆柱状机器人模型&#xff0c;机器人参数如下,底盘为圆柱状&#xff0c;半径 10cm&#xff0c;高 8cm&#xff0c;四轮由两个驱动轮和两个万向支撑轮组成&#xff0c;两个驱动轮半径为 3.25cm,轮胎宽度1.5cm&#xff0c;两个万向轮为球状&…

企业业财数字化建设-财务管理领域的产品设计

数字经济时代&#xff0c;企业数字化建设成为发展的必经之路&#xff0c;更多的企业搭建全渠道的营销&#xff0c;交易&#xff0c;履约和售后体系触达和服务用户&#xff0c;特别是面向小B和C端用户&#xff0c;交易变得更灵活多变。使得资源管控&#xff0c;稳定保守为底层基…

C语言的缺陷/错误处理问题探讨

最近遇到一个问题&#xff0c;先看看如下代码&#xff1a; uint8_t Bcd2Dec01(uint8_t bcd) {uint8_t one (bcd & 0x0F);uint8_t ten (bcd & 0xF0) >> 4;if ((one > 9) || (ten > 9)){printf("请输入合法的BCD码&#xff01;");return 0;}retu…

《C++内存管理》

本文主要介绍C内存管理的知识&#xff0c;主要包括new和delete&#xff0c;其实很简单&#xff0c;类比我们的C语言的内存管理malloc/free&#xff0c;就是在堆上申请内存的 小知识点&#xff1a; C构造对象的顺序&#xff1a;先构造全局&#xff0c;再构造局部静态对象&#x…

一些解决方案

文件异步下载方案 1 set QueryBussessType manually different type --> different resolving code、wherecondition 2. frontend request with the type 3. get excelHeader --> groovyUtil load from db 4. getData from db with pagination 5. saveData in an excel 6…

【测试面试】你要的宝典,软件接口测试面试题大全(总结)--附答案

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试主要目…

将war包发布到容器中的tomcat

文章目录 将war包直接发布到容器中使用数据卷将war包持久化到docker的宿主机(CentOS7) 将war包直接发布到容器中 1、将windows中的文件通过xftp程序传到centOS7中 2、创建容器&#xff0c;通过docker中的命令将web.jar复制到tomcat容器中 # 查看docker中的镜像 ~]$ docker imag…

0.8秒捕捉,速度超乎想象,小米和WPS用户太激动,office用户已用

只需0.8秒就能捕捉 距离4月18日小米13ultra发布会时间还剩一天。这几天雷军的微博已经把小米13ultra的亮点已经做了很多铺垫宣传。 除了系统和硬件之外&#xff0c;就是这次小米13ultra最大的“杀手锏”的就是“徕卡相机”。连宣传文案都改成了&#xff1a;一个伟大的瞬间&…

【UE】玩家位置存档

在上一篇博客中&#xff08;【UE】将存档的值显示在控件蓝图上&#xff09;我们介绍了如何将存档的值显示在控件蓝图上&#xff0c;本篇博客要介绍的是如何将玩家位置进行存档。 效果 可以看到重新进入游戏时&#xff0c;角色在存档点出现&#xff0c;而不是玩家出生点 步骤 …