MySQL基础知识(三)

news2024/9/27 5:36:45

1. 存储过程

存储过程是基于SQL语言的过程化编程扩展,允许将一系列SQL语句封装为一个可执行的程序。通过这种方式,可以提高执行效率,因为存储过程在编译后只需通过调用和参数传递来使用,而无需每次执行时都进行解析和编译。这种特性使得存储过程在处理复杂的业务逻辑和多次重复执行的数据库操作中非常有效。

2. 多版本并发控制(MVCC)

MVCC是一种避免锁机制以提高数据读取效率的方法。它通过保持数据的多个版本来解决线程安全问题,从而允许多个事务并发执行。在MVCC中:

  • Undo Log:记录数据修改前的状态,支持事务的回滚。
  • 版本链:用于跟踪数据的不同版本。
  • Read View:确保事务在读取数据时能够访问到有效的快照。

3. COUNT函数的性能比较

在MySQL中,COUNT(*)COUNT(1)的性能是相同的,通常优于COUNT(主键),而COUNT(字段)会排除NULL值。性能排序如下:

  • COUNT(*) = COUNT(1) > COUNT(主键) > COUNT(字段)

  • COUNT(name):统计字段name不为NULL的记录数。

  • COUNT(1):统计表中总记录数,包括NULL值。

  • COUNT(*):统计总记录数,包括NULL。

  • COUNT(主键):只统计主键列的数量,效率较低。

4. 回表

在使用索引进行查询时,若索引字段未能完全满足查询条件,MySQL将需要通过索引查找后再访问实际数据表进行数据的完整读取,这个过程称为“回表”。虽然使用索引可以加速查询,但回表的过程可能会影响性能。

5. 删除重复数据

在MySQL中,可以通过使用GROUP BY结合HAVING语句、使用临时表或子查询来实现删除重复数据,只保留一条。例如:

DELETE t1 FROM table_name t1
INNER JOIN table_name t2 
WHERE t1.id > t2.id AND t1.duplicate_column = t2.duplicate_column;

6. MySQL性能调优

  1. 缓存调优:调整缓冲池大小,引入Redis等缓存机制。
  2. 硬件升级:增加内存和使用SSD等快速存储设备。
  3. 垃圾清理:定期清理不再使用的表、数据和缓存,释放资源。
  4. 选择合适的引擎:例如MyISAM适合读多写少的场景,而InnoDB适合并发写入。
  5. 读写分离:通过主从同步提高读性能。
  6. 数据迁移:采用停机迁移和不停机迁移(增量与全量同步)。

7. MySQL日志机制

  • Binlog:记录数据库的写操作,以二进制格式存储,支持逻辑恢复。
  • Redo Log:记录数据页的修改,以实现故障恢复,属于物理日志。
  • Undo Log:用于实现事务的原子性,保存数据修改前的状态,支持回滚操作。

8. 慢查询

慢查询是指执行时间超过long_query_time参数设定的阈值(例如10秒)的查询。慢查询会被记录在慢查询日志中,以便于后期优化。

9. SQL调优手段

  1. 合理使用索引
  2. 优化查询语句:使用EXPLAIN分析执行计划,避免全表扫描等。
  3. 调整服务器硬件配置:提高CPU、扩展内存、使用高速磁盘。
  4. 定期维护数据库:保障数据完整性,进行备份和清理。
  5. 合理分配资源与连接管理
  6. 使用缓存技术:如Redis,缓存热点数据以降低数据库压力。
  7. 数据分区与分表:将大型数据集分散到多个表和库中以提高查询性能。
  8. 负载均衡技术:如主从同步,分散请求压力,提高并发性能。
  9. 优化数据库设计:遵循三范式,避免数据冗余。
  10. 监控性能和调优

10. SQL执行顺序

SQL语句的执行顺序为:

FROM > ON > JOIN > WHERE > GROUP BY > AGG_FUNC > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

11. DISTINCT与GROUP BY的区别

  • DISTINCT:用于消除查询结果中的重复记录。
  • GROUP BY:用于将结果集中的数据进行分组,通常与聚合函数一起使用。

12. B+树的层数计算

在假设的条件下,计算B+树的层数(假设100万条记录):

  • 一页大小为16KB,每个指针和主键占用的空间为14字节(8字节主键 + 6字节指针)。
  • 每页存储的指针数为 16*1024 / 14 ≈ 1170
  • 假设每页能存储16条记录,则可以推算出树的层数。

13. 数据库三范式

  1. 第一范式:每个字段都是原子的。
  2. 第二范式:满足第一范式且每行数据必须可唯一识别。
  3. 第三范式:非主属性必须直接依赖于主键,不能依赖于其他非主属性。

14. SQL约束

  1. NOT NULL:字段内容不能为空。
  2. UNIQUE:字段不能重复。
  3. PRIMARY KEY:标识主键。
  4. FOREIGN KEY:表与表之间的连接。
  5. CHECK:控制字段值的范围。

15. DROP、DELETE、TRUNCATE的区别

  • DELETE:按条件删除数据,可回滚,速度较慢。
  • TRUNCATE:删除表中所有数据,表结构不变,速度快且不可回滚。
  • DROP:删除整个表,包括索引和权限,不可回滚,速度最快。

16. 分库分表

  • 分表:将一个表的数据分散到多个表中,减少单表负担。
  • 分库:将数据库拆分到多个数据库中,增加并发处理能力。

17. 垂直与水平拆分

  • 水平拆分:将同一表的数据分散到多个表中,但表结构一致。
  • 垂直拆分:将一个表拆分成多个表,每个表包含部分字段。

18. 主从同步与读写分离

主从同步通过在主数据库上执行写操作,并将数据同步到从数据库,实现读写分离,提高性能及数据安全。

19. MySQL数据存储结构

MySQL通过使用不同的存储引擎来存储和管理数据,支持高效的读写操作,满足多种业务需求。

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

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

相关文章

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 前言部署前的准备创建实例 部署与配置 Llama 3.1使用心得总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模…

manim中文字和目标的对齐方法的使用

为什么要文字对齐 ? 对齐原则在现实生活中无处不在,比如:书籍、货架、地铁座位等等;对齐的目的其实就是在规整文案信息,对齐有利于信息传达以及视觉规范,当我们做文字编排工作时,要根据构图形…

【计算机网络 - 基础问题】每日 3 题(二十六)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

基于springboot+vue 旅游网站的设计与实现

基于springbootvue 旅游网站的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c…

【中级通信工程师】终端与业务(五):市场与通信市场

【零基础3天通关中级通信工程师】 终端与业务(五):市场与通信市场 本文是中级通信工程师考试《终端与业务》科目第五章《市场与通信市场》的复习资料和真题汇总。终端与业务是通信考试中最基础的科目之一,复习重点包括通信市场的概念、通信市场结构、以…

【IOS】申请开发者账号(公司)

官网:Apple Developer (简体中文) 申请开发者账号前提 如果是第一次申请建议注册一个新的apple id作为组织的开发者账号。(确保apple id的个人信息是真实的,不能是网名或者是其他名。后续的申请步骤需要能和apple id的个人信息对上。&#…

嵌入式开发 —— IO口高阻态模式

目 录 高阻态输入模式一、区别于浮空输入二、高阻态输入的优点 高阻态输入模式 MCU管脚的高阻态模式是电路的一种输出或输入状态。在这种状态下,电路的输入端或输出端对地或对电源的电阻非常大,在实际应用中与引脚悬空类似。 电气特性 1、高电阻值&…

C#入门教程

目录 1.if分支语句 2.面向对象 3.static简单说明 1.if分支语句 我们的这个C#里面的if语句以及这个if-else语句和C语言里面没有区别,就是打这个输出上面的方式不一样,c#里面使用的是这个console.writeline这个指令,其他的这个判断逻辑都是一…

技术美术百人计划 | 《5.1.3 PBR-基于物理的灯光》笔记

1. 辐射度学 定义:辐射度学是一门以整个电磁波段的电磁辐射能测量为研究的科学。 而计算机图形学中涉及的辐射度学,则集中于整个电磁波普中光学谱段中的可见光谱段的辐射能的计算。 1.1. 立体角 概念:单位球体上的一块区域对应的球面部分的…

计算机毕业设计 中医院问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

uniapp自定义底部tabBar

使用场景&#xff1a;在一个非tabbar页面&#xff0c;想要有底部导航效果&#xff0c;故自定义效果&#xff0c;系统原底部导航栏仍在正常使用 效果&#xff1a; 布局&#xff1a; <template><view class"tab-bar" :style"{height: height px}"…

《征服数据结构》哈夫曼树(Huffman Tree)

摘要&#xff1a; 1&#xff0c;哈夫曼树的介绍 2&#xff0c;哈夫曼树的构造 3&#xff0c;哈夫曼树带权路径长度计算 4&#xff0c;哈夫曼树的编码 5&#xff0c;哈夫曼树的解码 1&#xff0c;哈夫曼树的介绍 哈夫曼树(Huffman Tree)也叫霍夫曼树&#xff0c;或者赫夫曼树&am…

游戏怎么录制?王者荣耀游戏录制指南:iOS与电脑端全面教程

在王者荣耀的战场上&#xff0c;每一个五杀、每一次极限逃生都可能成为你游戏生涯中的高光时刻。但这些瞬间往往转瞬即逝&#xff0c;如何将它们永久保存&#xff0c;成为你游戏历程中不可磨灭的印记呢&#xff1f;本文将为你揭晓答案。无论你是手持iPhone的iOS用户&#xff0c…

正则中捕获组和非捕获组区别

捕获组和非捕获组 一. 捕获组&#xff08;Capturing Groups&#xff09;二. 非捕获组&#xff08;Non-Capturing Groups&#xff09;三. 区别四. 选择使用 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;…

GESP等级考试C++二级-数学函数

C的cmath库中有丰富的数学函数&#xff0c;通过这些函数可以进行相应的数学计算。 1 cmath库的导入 通过import指令导入cmath库&#xff0c;代码如图1所示。 图1 导入cmath库的代码 2 abs()函数 abs()函数用来获取指定数的绝对值&#xff0c;代码如图2所示。 图2 abs()函数…

【递归】7. leetcode 404 左叶子之和

1 题目描述 题目链接&#xff1a;左叶子之和 2 解答思路 递归分为三步&#xff0c;接下来就按照这三步来思考问题 第一步&#xff1a;挖掘出相同的子问题 &#xff08;关系到具体函数头的设计&#xff09; 第二步&#xff1a;只关心具体子问题做了什么 &#xff08;关系…

macOS安装Redis教程, 通过brew命令, 时间是2024年9月26日, redis版本是0.7.2

搜索: brew search redis安装Redis: brew install redis关于启动命令的提示: To start redis now and restart at login:brew services start redis Or, if you dont want/need a background service you can just run:/opt/homebrew/opt/redis/bin/redis-server /opt/home…

【图像处理】多幅不同焦距的同一个物体的平面图象,合成一幅具有立体效果的单幅图像原理(二)

实现多幅不同焦距图像合成一幅具有立体效果的图像可以使用以下算法和开源库&#xff1a; 实现算法 图像对齐 使用特征点匹配&#xff08;如 SIFT、SURF 或 ORB&#xff09;来对齐图像。利用 RANSAC 算法剔除离群点&#xff0c;估计变换矩阵。 深度图生成 基于图像的焦距和视角…

Teams集成-会议侧边栏应用开发-会议转写

Teams应用开发&#xff0c;主要是权限比较麻烦&#xff0c;大量阅读和实践&#xff0c;摸索了几周&#xff0c;才搞明白。现将经验总结如下&#xff1a; 一、目标&#xff1a;开发一个Teams会议的侧边栏应用&#xff0c;实现会议的实时转写。 二、前提&#xff1a; 1&#x…

探索5 大 Node.js 功能

目录 单线程 Node.js 工作线程【Worker Threads】 Node.js 进程 进程缺点 工作线程 注意 集群进程模块【Cluster Process Module】 内部发生了什么&#xff1f; 为什么要使用集群 注意&#xff1a; 应用场景&#xff1a; 内置 HTTP/2 支持 这个 HTTP/2 是什么&…