
mysql
文章平均质量分 95
mysql数据库积累
margu_168
这个作者很懒,什么都没留下…
展开
-
【Mysql】事务的隔离级别与 MVCC
我们知道 MySQL 是一个 C/S 架构的服务,对于同一个服务器来说,可以有多个客户端与之连接,每个客户端与服务器连接上之后,就是一个会话( Session )。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务。在事务简介的章节中我们说过事务有隔离性的特征,理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据。原创 2024-02-02 11:14:20 · 1141 阅读 · 0 评论 -
【Mysql】InnoDB统计数据的收集(十三)
innoDB 以表为单位来收集统计数据,这些统计数据可以是基于磁盘的永久性统计数据,也可以是基于内存的非永久性统计数据。innodb_stats_persistent 控制着使用永久性统计数据还是非永久性统计数据;innodb_stats_persistent_sample_pages 控制着永久性统计数据的采样页面数量;innodb_stats_transient_sample_pages 控制着非永久性统计数据的采样页面数量;原创 2023-12-25 14:51:06 · 1140 阅读 · 1 评论 -
【Mysql】InnoDB的表空间(九)
表空间是一个在 InnoDB 中比较抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;而对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。可以把表空间想象成由很多个页组成的池子(pool),当我们想为某个表插入一条记录的时候,就会从对应的池子中选一个合适的页将数据写进去。原创 2023-12-14 15:46:48 · 1135 阅读 · 0 评论 -
【Mysql】MySQL基于成本的优化(十二)
单次查询驱动表的成本多次查询被驱动表的成本(具体查询多少次取决于对驱动表查询的结果集中有多少条记录)我们把对驱动表进行查询后得到的记录条数称之为驱动表的 扇出 (英文名: fanout )。很显然驱动表的扇出值越小,对被驱动表的查询次数也就越少,连接查询的总成本也就越低。查询一:假设使用 s1 表作为驱动表,很显然对驱动表的单表查询只能使用全表扫描的方式执行(没有过滤条件),驱动表的扇出值也很明确,那就是驱动表中有多少记录,扇出值就是多少。原创 2023-11-14 16:20:59 · 274 阅读 · 0 评论 -
【Mysql】Mysql中表连接的原理(十一)
理论上我们可以连接任意数量张表,但是如果没有任何限制条件的话,这些表连接起来产生的 笛卡尔积可能是非常巨大的。比方说3个100行记录的表连接起来产生的 笛卡尔积就有 100×100×100=1000000 行数据!涉及单表的条件这种只设计单表的过滤条件我们之前都提到过一万遍了,我们之前也一直称为搜索条件 ,比如 t1.m1 > 1是只针对 t1 表的过滤条件, t2.n2 < ‘d’ 是只针对 t2 表的过滤条件。涉及两表的条件。原创 2023-11-03 15:26:21 · 422 阅读 · 0 评论 -
【Mysql】Mysql单表访问方法(十)
作为一个DBA或者运维人员,有时候发现数据库有慢查询语句需要优化,那么我们就需要先了解查询是怎么执行的。我们知道,MySQL Server 有一个查询优化器的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的执行计划 ,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是怎样的,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。接下来我们先了解一下Mysql怎么执行单表查询,方便后续学习优化。先创建一个测试表。原创 2023-10-30 09:04:06 · 335 阅读 · 0 评论 -
【Mysql】Mysql的数据目录(八)
My默认自带了的几个系统数据库,这几个数据库包含了MySQL服务器运行过程中所需的一些信息以及一些运行状态信息,我们稍作了解。mysql这个数据库贼核心,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引等。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为元数据。原创 2023-10-23 13:46:09 · 272 阅读 · 0 评论 -
【Mysql】B+树索引的使用(七)
每个索引都对应一棵 B+ 树, B+ 树分为多层,最下边一层是叶子节点,其余的是内节点(非叶子节点)。所有用户记录都存储在 B+ 树的叶子节点,所有目录项记录都存储在内节点。InnoDB 存储引擎会自动为主键(如果没有它会自动帮我们添加)建立聚簇索引 ,聚簇索引的叶子节点包含完整的用户记录。原创 2023-10-22 23:06:24 · 1075 阅读 · 0 评论 -
【Mysql】Mysql中的B+树索引(六)
上面介绍的都是 InnoDB 存储引擎中的索引方案,为了内容的完整性,以及各位可能在面试的时候遇到这类的问题,我们有必要再简单介绍一下 MyISAM 存储引擎中的索引方案。将表中的记录按照记录的插入顺序单独存储在一个文件中,称之为数据文件。这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少记录就成了。我们可以通过行号而快速访问到一条记录。原创 2023-10-19 23:50:52 · 405 阅读 · 0 评论 -
【Mysql】InnoDB数据页结构(五)
数据页代表的这块默认的16KB大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:从上图可以看出,一个 InnoDB 数据页的存储空间大致被划分成了 7 个部分,有的部分占用的字节数是确定的,有的部分占用的字节数是不确定的。名称中文名占用空间大小简单描述文件头部38 字节页的一些通用信息页面头部56 字节数据页专有的一些信息最小记录和最大记录26 字节两个虚拟的行记录用户记录不确定实际存储的行记录内容Free Space空闲空间不确定。原创 2023-10-18 23:02:16 · 476 阅读 · 0 评论 -
【Mysql】Innodb数据结构(四)
InnoDB存储引擎将表中的数据存储到磁盘上,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以还是需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我想从表中获取某些记录时, InnoDB 存储引擎需要一条一条的把记录从磁盘上读出来么?不,那样会很慢,原创 2023-10-17 22:55:40 · 761 阅读 · 0 评论 -
【Mysql】Mysql的字符集和比较规则(三)
在我们确定了 margu字符集表示字符的范围以及编码规则后,怎么比较两个字符的大小呢?比较简单的就是直接比较这两个字符对应的二进制编码的大小,比方说字符 ‘a’ 的编码为 0x01 ,字符 ‘b’ 的编码为 0x02 ,所以 ‘a’ 小于 ‘b’ ,这种简单的比较规则也可以被称为二进制比较规则,英文名为 binary collation。原创 2023-10-16 22:26:37 · 552 阅读 · 0 评论 -
【Mysql】Mysql的启动选项和系统变量(二)
MySQL 服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为 MySQL 系统变量,比如允许同时连入的客户端数量用系统变量 max_connections 表示,表的默认存储引擎用系统变量 default_storage_engine 表示,查询缓存的大小用系统变量 query_cache_size 表示, MySQL 服务器程序的系统变量有好几百条,每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。原创 2023-10-12 21:38:13 · 891 阅读 · 0 评论 -
【Mysql】重新认识mysql(一)
参考Mysql是怎么运行的,并结合实际的工作经验对mysql的知识进行总结。原创 2023-10-11 15:55:56 · 579 阅读 · 0 评论