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

mysql的原理及经验

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.kler.cn/a/536995.html

相关文章:

  • 旋转变压器工作及解调原理
  • Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录(一)
  • 每日Attention学习18——Grouped Attention Gate
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_num 函数
  • 【Origin笔记-2】降水量变化趋势单位理解
  • nlp文章相似度
  • Vue3+codemirror6实现公式(规则)编辑器
  • 记录一次mysql主从
  • 【远程控制】安装虚拟显示器
  • 快速上手——.net封装使用DeekSeek-V3 模型
  • openCV函数使用(一)
  • JMeter通过BeanShell写入CSV文件中的中文乱码
  • MoviePy,利用Python自动剪辑tiktok视频
  • 【Unity 墓地和自然环境场景资产包】PBR Graveyard and Nature Set 2.0 高质量的墓地3D 模型,丰富的自然环境元素,轻松构建具有沉浸感和氛围感的游戏世界
  • 三级等保、二级等保谁更高级 ?等保都有哪些?
  • Gateway路由匹配规则详解
  • k8s网络插件及基础命令
  • LINUX——内核驱动程序
  • Python+requests实现接口自动化测试
  • 阿里云不同账号vpc对等连接
  • 文件上传全详解
  • 当春晚遇上AI,传统与科技的奇妙碰撞
  • 使用 Axios 进行高效的数据交互
  • 各种协议设计
  • (2025|Meta,LLM,token 压缩/挑选,离散潜在标记,VQ-VAE)混合潜在标记和文本标记以改进语言模型推理
  • 详解正则表达式与案例