当前位置: 首页 > news >正文

深入MySQL:掌握索引、事务、视图、存储过程与性能优化

在掌握了MySQL的基本操作之后,你可能会遇到更复杂的数据管理和优化需求。本文将介绍一些MySQL的进阶特性,包括索引、事务、视图、存储过程和函数、以及性能优化等内容。通过学习这些高级功能,你可以更高效地管理和优化你的数据库。

索引

索引是数据库中用于提高查询效率的数据结构。合理使用索引可以显著提升查询性能。

创建索引

CREATE INDEX index_name ON table_name (column1, column2);

查看索引

SHOW INDEX FROM table_name;

删除索引

DROP INDEX index_name ON table_name;

示例

假设有一个users 表,经常需要根据 email列进行查询,可以为email列创建一个索引:

CREATE INDEX idx_email ON users (email);

事务

事务是一组SQL语句,它们作为一个整体一起执行,要么全部成功,要么全部失败。事务保证了数据库的一致性和完整性。

开始事务

START TRANSACTION;

提交事务

COMMIT;

回滚事务

ROLLBACK;

示例假设需要从一个账户转账到另一个账户,这需要两个更新操作:

START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;COMMIT;

视图

视图是一个虚拟表,其内容由查询定义。视图可以简化复杂的查询,提高数据的安全性。

创建视图

CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;

查询视图

SELECT * FROM view_name;

删除视图

DROP VIEW view_name;

示例

假设有一个orders表,经常需要查询某个客户的订单,可以创建一个视图:

CREATE VIEW customer_orders AS
SELECT order_id, order_date, total_amount
FROM orders
WHERE customer_id = 1;

存储过程和函数

存储过程和函数是预编译的SQL代码块,可以重复使用,提高代码的可维护性和性能。

创建存储过程

DELIMITER //
CREATE PROCEDURE procedure_name (IN param1 datatype, OUT param2 datatype)
BEGIN-- SQL statements
END //
DELIMITER ;

调用存储过程

CALL procedure_name(param1, @param2);

创建函数

DELIMITER //
CREATE FUNCTION function_name (param1 datatype)
RETURNS datatype
BEGINDECLARE result datatype;-- SQL statementsRETURN result;
END //
DELIMITER ;

调用函数

SELECT function_name(param1);

示例

创建一个存储过程,用于插入一条用户记录并返回新用户的ID:

DELIMITER //
CREATE PROCEDURE insert_user (IN username VARCHAR(100), IN email VARCHAR(100), OUT user_id INT)
BEGININSERT INTO users (name, email) VALUES (username, email);SET user_id = LAST_INSERT_ID();
END //
DELIMITER ;

调用存储过程

CALL insert_user('张三', 'zhangsan@example.com', @user_id);
SELECT @user_id;

性能优化

性能优化是确保数据库高效运行的关键。以下是一些常见的优化技巧:

优化查询

使用索引:确保频繁查询的列上有适当的索引。
避免全表扫描:尽量使用索引列进行过滤。
减少子查询:尽量使用JOIN代替子查询。

优化表结构

选择合适的数据类型:使用最小的合适数据类型。
归档旧数据:定期归档不再需要的历史数据。
分区表:对于大表,可以考虑使用分区表。

优化配置

调整缓存大小:根据系统资源调整InnoDB缓冲池大小。
优化连接池:合理设置最大连接数,避免过多的连接消耗资源。

示例

假设有一个logs表,记录了大量的日志数据,可以考虑使用分区表来提高查询性能:

CREATE TABLE logs (id INT AUTO_INCREMENT PRIMARY KEY,log_date DATE,message TEXT
)
PARTITION BY RANGE (YEAR(log_date)) (PARTITION p0 VALUES LESS THAN (2020),PARTITION p1 VALUES LESS THAN (2021),PARTITION p2 VALUES LESS THAN (2022),PARTITION p3 VALUES LESS THAN MAXVALUE
);

相关文章:

深入MySQL:掌握索引、事务、视图、存储过程与性能优化

在掌握了MySQL的基本操作之后,你可能会遇到更复杂的数据管理和优化需求。本文将介绍一些MySQL的进阶特性,包括索引、事务、视图、存储过程和函数、以及性能优化等内容。通过学习这些高级功能,你可以更高效地管理和优化你的数据库。 索引 索…...

【WSL——Windows 上使用 Linux 环境】

引入 以前在windows上使用linux工具链,一般都要安装虚拟机(VMware/virtualBox)。虚拟机的缺点是,因为是完整的虚拟环境,消耗系统资源比较多。 windows自己开发了WSL功能,实现了虚拟机的功能,但是比虚拟机性…...

Redis:事务

什么是Redis事务 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说&…...

策略模式的介绍和具体实现

❤ 作者主页:李奕赫揍小邰的博客 ❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~* 🍊 记得点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习!!!🎉🎉 文章目录 策略接口三种…...

MySQL InnoDB MVCC数据结构分析

1、概述 MVCC(Multiversion Concurrency Control)多版本并发控制,通过维护不同的版本号,提供一种很好的并发控制技术,这种技术能够使读写操作不冲突,提升并发性能。 MySQL InnoDB存储引擎,在更…...

MySQL 8 查看 SQL 语句的执行进度

目录 1. 查询各阶段执行进度 (1)开启收集与统计汇总执行阶段信息的功能 (2)确定执行的SQL所属的thread_id (3)查询各阶段的执行进度 2. 查询SQL语句的整体执行进度 1. 查询各阶段执行进度 &#xff0…...

OpenStack 部署实践与原理解析 - Ubuntu 22.04 部署 (DevStack)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言OpenStack 原理详解1. OpenStack 的架构2. OpenStack 的工作原理3. OpenStack 的 API4. 扩展性和模块化 OpenStack 安装方式比较1. DevStack2. Kolla3. OpenSta…...

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果:可行性研究报告 例题 选择题...

乌克兰因安全风险首次禁用Telegram

据BleepingComputer消息,乌克兰国家网络安全协调中心 (NCCC) 以国家安全为由,已下令限制在政府机构、军事单位和关键基础设施内使用 Telegram 消息应用程序。 这一消息通过NCCC的官方 Facebook 账号对外发布,在公告中乌…...

[SDX35]SDX35如何查看GPIO的Base值

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...

【Linux学习】【Ubuntu入门】2-1-1 vim编辑器设置

设置TAB键为4字节及显示行号 VIM编辑器默认TAB键为8空格,改为4空格 输入命令sudo vi /etc/vim/vimrc回车后输入密码按键盘下键到最后,按下“a”进入编辑模式,输入set ts4设置为4空格下一行输入set nu显示行号...

全栈开发(一):springBoot3+mysql初始化

1.开发环境准备 1.开发工具 2.jdk下载 官网下载java17 3.java环境变量配置 用户变量: ①.JAVA_HOME ②.path 4.mysql下载 b站随便搜 5.新建项目 6.maven配置 可以下载zip放到目录里 这里是配置好的 repository文件夹:为maven提供下载的文件存放…...

有关若依登录过程前端的对应处理学习

导言 在用C#搞完个后端后想用若依的前端做对接,不过很久没搞过若依了,想趁这个二次开发的过程记录熟悉一下登录的过程 过程 验证,在permission.js的路由守卫,这里在用户发起api请求时会验证用户的请求是否有token,对…...

django使用笔记6--docker部署

django使用笔记--docker部署 多环境配置创建环境变量配置文件静态资源配置dockerfile配置 由于服务器中python版本和依赖与本地开发环境不同,且centOS7中python及依赖安装更新较为麻烦,所以采用docker容器部署 多环境配置 多环境配置类似Spring中的多环…...

高性能、高可靠,MK SD卡让数据存储无忧!

文章目录 SD卡(Secure Digital Memory Card),作为当代数字生活中不可或缺的存储媒介,凭借其卓越的数据传输效率、灵活的热插拔功能以及惊人的存储容量,在多个领域大放异彩。从日常使用的智能手机、平板电脑到追求极致体…...

NetAssist测试TCP和UDP

由于在Windows下经常使用NetAssist.exe这款网络调试工具进行TCP、UDP的服务端、客户端的监听,对于需要编写各种通信协议的TCP服务端、客户端以及UDP通信程序来说是很方便的。下载地址:http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.14.…...

mcuboot使用介绍

准备工作 硬件平台选择 确保你的微控制器单元(MCU)是 MCUboot 所支持的类型。查看 MCUboot 的文档或官方支持列表,了解其兼容的 MCU 系列和硬件平台。根据硬件平台的设计,将微控制器与相关的外设(如闪存、通信接口等&a…...

如何在 Linux 终端使用 GET 和 POST 请求

文章目录 1、GET请求基本请求带有请求头带有参数将响应保存成文件 2、POST请求基本请求发送JSON格式的POST请求体使用文件作为POST请求体使用时注意 1、GET请求 基本请求 在Linux中,发送GET请求通常使用 curl 命令,curl 的默认行为就是发送GET请求&…...

主从数据库同步配置详解(MySQL/MariaDB)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、环境准备与安装配置本地部署MySQLUbuntu 系统:CentOS 系统: MariaDBUbuntu 系统:CentOS 系统: 容器部署MySQ…...

台式机通过笔记本上网

概述: ①将wifi共享给网口 ②网口配置成自协商IP和DNS即可 一、背景 由于台式机只有网口,没得wifi网卡,因此想通过笔记本连wifi,再通过网线将笔记本和台式机连接起来,从而实现台式机通过笔记本的wifi上网,即让笔记本当台式机的…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...