MySQL(高级篇)

逻辑结构

  • 一条sql语句是如何执行的嘞【逻辑架构图↓↓↓】
    MySQL逻辑架构图

物理结构

  • MySQL是通过文件系统对数据和索引进行存储的。
  • MySQL从物理结构上可以分为日志文件和数据索引文件。
  • MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。
  • 日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。
日志文件
  • 错误日志(errorlog)
    默认是开启的,而且从5.5.7以后无法关闭错误日志,错误日志记录了运行过程中遇到的所有严重的错误
    信息,以及 MySQL每次启动和关闭的详细信息。

  • 二进制日志(bin log)
    记录数据变化
    binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息。如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。 【生产中开启】

  • 通用查询日志(general query log)
    啥都记录 耗性能 生产中不开启

  • 慢查询日志(slow query log)
    SQL调优 定位慢的 select 记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句

  • 重做日志(redo log)
    重做日志记录着数据库所发生的变化,进行一条DML语句时候如果提交会先写入重做日志里。如果数据库出问题了,也可以根据重做日志来进行恢复。
    数据库日志和数据落盘机制:
    在这里插入图片描述

  • 回滚日志(undo log)
    Undo记录存储的是老版本数据,当一个旧事务需要读取数据时,为了能读取到老版本数据,需要顺着undo连找到满足其可见性的记录。

  • 中继日志(relay log)
    MySQL进行主主复制或主从复制的时候会在home目录下产生相应的relaylog。
    relaylog很多方面都跟binlog差不多,区别:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relaylog日志内容并应用到从服务器。

MySQL高级知识包含多方面内容,以下是详细介绍: ### SQL语句分类 - **DQL(查询语句)**:用于从数据库中查询数据。 - **DML(写操作)**:包括添加、删除、修改数据的操作。 - **DDL(定义语句)**:用于建库、建表、修改表、索引操作、存储过程、视图等。DDL语句都是隐式提交,执行这种语句相当于执行`commit` [^1]。 - **DCL(控制语言)**:用于给用户授权或删除授权 [^1]。 ### 存储引擎 存储引擎以前叫表处理器,其功能是接收上层指令,对表中数据进行提取或写入操作。为方便管理,将连接管理、查询缓存、语法解析、查询优化等不涉及真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。不同存储引擎向上层的MySQL server层提供统一的调用接口(存储引擎API),包含如“读取索引第一条内容”“读取索引下一条内容”“插入记录”等底层函数。MySQL server完成查询优化后,按执行计划调用底层存储引擎提供的API,获取数据并返回给客户端。MySQL提供多种存储引擎,不同存储引擎管理的表存储结构和存取算法可能不同 [^1]。 ### 索引 MySQL官方定义索引是帮助MySQL高效获取数据的有序数据结构,包括数组、链表、红黑树、二叉树、堆、栈等。在数据之外,数据库系统维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,从而实现高级查找算法 [^2]。 ### 全局查询日志 全局查询日志用于保存所有的SQL执行记录,主要用于测试环境,生产环境中开启会消耗大量资源,因此永远不要开启该功能。开启方式有两种: - **通过mysql的my.cnf配置开启**: ```plaintext # 开启 general_log=1 # 记录日志文件的路径 general_log_file=/usr/local/mysql-5.7.22/data/log/globalquerylog/log_globalquery.log # 输出格式 log_output=FILE ``` - **通过命令开启**: ```sql set global general_log=1; -- 全局日志可以存放在日志文件中,也可以放在MySQL系统表中。存放在日志中性能更好一点 set global log_output='TABLE'; -- 此后编写的sql语句,将会记录在mysql库里的general_log表中,可以通过下面的命令查看 select * from mysql.general_log; ``` [^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值