mysql的原理及经验

news2025/2/8 22:56:43

1. 存储引擎

存储引擎是MySQL的核心组件之一,它负责数据的存储和检索。MySQL支持多种存储引擎,每种引擎都有其独特的特点和适用场景。

  • InnoDB:这是MySQL的默认存储引擎,支持事务处理(ACID特性)、行级锁定和外键。它非常适合需要高并发和事务支持的应用场景。

  • MyISAM:虽然它不支持事务,但提供了全文索引和较高的读取速度,适合读多写少的应用场景。

  • Memory:将数据存储在内存中,提供极高的读写速度,但数据在服务器重启后会丢失。

  • 其他引擎:如Archive(用于存储大量不常访问的数据)、CSV(将数据存储为CSV文件)等。

2. 数据结构

MySQL使用多种数据结构来组织和存储数据,主要包括:

  • 表(Table):数据的基本存储单元,由行(记录)和列(字段)组成。

  • 索引(Index):用于加速数据检索的结构,常见的索引类型包括B树索引、哈希索引等。

  • 视图(View):虚拟表,其内容由SQL查询定义,可以简化复杂的查询操作。

  • 存储过程(Stored Procedure):预编译的SQL语句集合,可以提高代码复用性和执行效率。

3. 事务处理

事务是数据库操作的基本单位,它确保一系列操作要么全部成功,要么全部失败。MySQL的事务特性主要由InnoDB存储引擎支持,包括以下内容:

  • ACID特性

    • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成。

    • 一致性(Consistency):事务执行前后,数据库的状态保持一致。

    • 隔离性(Isolation):并发事务之间互不干扰,MySQL支持多种隔离级别(如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)。

    • 持久性(Durability):事务提交后,其结果是永久性的,即使系统故障也不会丢失。

  • 事务控制语句

    • BEGIN TRANSACTIONSTART TRANSACTION:开始一个事务。

    • COMMIT:提交事务。

    • ROLLBACK:回滚事务。

4. SQL解析器和执行引擎

当用户发送SQL语句到MySQL服务器时,SQL解析器和执行引擎会处理这些语句:

  • SQL解析器:解析SQL语句,检查语法错误,并将其转换为内部的查询树结构。

  • 查询优化器:分析查询树,选择最优的执行计划。

  • 执行引擎:根据优化后的执行计划,执行SQL语句,从存储引擎中读取或写入数据。

5. 数据库连接和权限管理

MySQL提供了强大的连接和权限管理功能,确保数据库的安全性和高效性:

  • 连接管理

    • 支持多种客户端连接方式,如TCP/IP、Unix Socket等。

    • 可以设置连接池,管理并发连接数。

  • 权限管理

    • 用户账户管理:创建、删除用户,设置用户密码。

    • 权限控制:通过GRANT和REVOKE语句,授予或撤销用户对数据库、表、列等的访问权限。

    • 角色管理:MySQL 8.0引入了角色(Role)的概念,可以将一组权限分配给角色,再将角色分配给用户,简化权限管理。

6. 其他重要特性

  • 备份和恢复:支持多种备份方式,如物理备份、逻辑备份,以及恢复操作。

  • 复制(Replication):通过主从复制,实现数据的高可用性和读写分离。

  • 分区(Partitioning):将大表分割成多个分区,提高查询效率和管理便利性。

  • 性能优化:提供多种性能优化工具和技术,如慢查询日志、索引优化等。

经验:

1.使用关联查询的时候,用小表驱动大表的方式效率会提升很多。而 inner join 会自动的进行小表驱动大表的优化

2.避免大事务,大事务就是运行的时间比较长,操作的数据比较多的事务
大事务会影响数据库的性能,应当尽量把大事务拆成若干个小事务,禁止写过于复杂的sql语句,除了造成大事务不说,还会让别人头大,无法维护。

3.删除操作应该采用逻辑删除,不能物理删除。

4.长度较长的字段上建立索引时,必须指定索引长度,没必要对全字段建立索引

5.设计索引的时候尽量使用复合索引,并将区分度高的字段放在前面

6.不要使用外键与其它表进行关联,避免高并发场景的性能问题

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

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

相关文章

【漫话机器学习系列】083.安斯库姆四重奏(Anscombe‘s Quartet)

安斯库姆四重奏(Anscombes Quartet) 1. 什么是安斯库姆四重奏? 安斯库姆四重奏(Anscombes Quartet)是一组由统计学家弗朗西斯安斯库姆(Francis Anscombe) 在 1973 年 提出的 四组数据集。它们…

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…

开源安全一站式构建!开启企业开源治理新篇章

在如今信息技术日新月异、飞速发展的数字化时代,开源技术如同一股强劲的东风,为企业创新注入了源源不断的活力,然而,正如一枚硬币有正反两面,开源技术的广泛应用亦伴随着不容忽视的挑战。安全风险如影随形,…

Node.js 与 npm 版本兼容性问题详解:如何避免版本冲突

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

鸿蒙开发中 SaveButton 按钮 保存按钮点击后权限授权失败。

原因分析 查看官方文档的解释 在 控制台中 过滤这个字段 过滤关键字"SecurityComponentCheckFail"可以获取具体原因。 得到 产生的原因 是 因为层叠的原因 savebutton 组件必须的 在屏幕的最高层 不能有任何的覆盖和遮挡 通过这样书写就解决了 // 下面是安…

胜任力冰山模型:深入探索职业能力的多维结构

目录 1、序言 2、什么是胜任力? 3、任职资格和胜任力的区别 4、胜任力冰山模型:职场能力的多维展现 4.1、冰山水面上的部分 4.2、冰山水面下的部分 4.3、深层的个人特质与价值观 5、如何平衡任职资格与胜任能力 6、结语 1、序言 在快速发展的I…

C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】

C#面试题(中级篇),详细讲解,帮助你深刻理解,拒绝背话术!-CSDN博客 简单工厂模式 优点: 根据条件有工厂类直接创建具体的产品 客户端无需知道具体的对象名字,可以通过配置文件创建…

将Deepseek接入pycharm 进行AI编程

目录 专栏导读1、进入Deepseek开放平台创建 API key 2、调用 API代码 3、成功4、补充说明多轮对话 总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——…

《论文阅读》GPT-3是否会产生移情对话?一种新的情境示例选择方法和用于生成同理心对话的自动评估度量 ICCL 2022

《论文阅读》GPT-3是否会产生移情对话?一种新的情境示例选择方法和用于生成同理心对话的自动评估度量 ICCL 2022 前言贡献PromptIn-context learningSITSMEMOSITSM新的自动指标实验前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲…

javaEE初阶————多线程初阶(3)

大家新年快乐呀,今天是第三期啦,大家前几期的内容掌握的怎么样啦? 1,线程死锁 1.1 构成死锁的场景 a)一个线程一把锁 这个在java中是不会发生的,因为我们之前讲的可重入机制,在其他语言中可…

【Flink快速入门-1.Flink 简介与环境配置】

Flink 简介与环境配置 实验介绍 在学习一门新的技术之前,我们首先要了解它的历史渊源,也就是说它为什么会出现,它能够解决什么业务痛点。所以本节我们的学习目的是了解 Flink 的背景,并运行第一个 Flink 程序,对它有…

WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建

WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建 一、前言二、WPF 核心架构2.1 核心组件2.2 布局系统2.3 数据绑定机制2.4 事件处理机制 三、WPF 开发环境搭建3.1 安装 Visual Studio3.2 创建第一个 WPF 应用程序 结束语优质源码分享 WPF基础 | 初探 WPF&#xff…

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…

深入理解小波变换:信号处理的强大工具

引言 在科学与工程领域,信号处理一直是关键环节,傅里叶变换与小波变换作为重要的分析工具,在其中发挥着重要作用。本文将深入探讨小波变换,阐述其原理、优势以及与傅里叶变换的对比,并通过具体案例展示其应用价值。 一…

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…

关于ESP-IDF 5.4 中添加第三方组件esp32-camera找不到文件,编译错误解决办法(花了一天时间解决)

最近需要使用ESP32-S3-CAM 的OV2640摄像头采集图像,为了加速开发进度,于是选择了esp32-camera组件,该组件不是官方组件,需要自己git clone。但在为项目添加esp32-camera组件时,一直编译错误,找不到头文件&a…

Android LifecycleOwner 闪退,java 继承、多态特性!

1. 闪退 同意隐私政策后,启动进入游戏 Activity 闪退 getLifecycle NullPointerException 空指针异常 FATAL EXCEPTION: main Process: com.primer.aa.gg, PID: 15722 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.primer.aa.…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣(LeetCode) 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

基于SpringBoot养老院平台系统功能实现五

一、前言介绍: 1.1 项目摘要 随着全球人口老龄化的不断加剧,养老服务需求日益增长。特别是在中国,随着经济的快速发展和人民生活水平的提高,老年人口数量不断增加,对养老服务的质量和效率提出了更高的要求。传统的养…

【3分钟极速部署】在本地快速部署deepseek

第一步,找到网站,下载: 首先找到Ollama , 根据自己的电脑下载对应的版本 。 我个人用的是Windows 我就先尝试用Windows版本了 ,文件不是很大,下载也比较的快 第二部就是安装了 : 安装完成后提示…