MySQL 数据宝典
文章平均质量分 90
本专栏旨在帮助读者深入了解MySQL数据库管理系统。MySQL是一种流行的关系型数据库,被广泛用于各种应用程序和网站开发中。无论你是数据库新手还是有经验的开发人员,本专栏都将为你提供宝贵的知识和技能。
黄金时代的架构之路
你知道的越多,你不知道的越多
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【MySQL 数据宝典】【事务&锁】- 002 事务控制的演进
MySQL中实现MVCC(多版本并发控制)的机制主要基于undo log多版本链和ReadView机制。通过undo log多版本链和ReadView机制的结合,MySQL实现了MVCC机制,确保了数据库在并发操作下的一致性和隔离性。原创 2024-05-11 14:05:05 · 862 阅读 · 0 评论 -
【MySQL 数据宝典】【事务&锁】- 001 ACID特性介绍
未提交事务,写入后崩溃:程序还没修改完三个数据,但数据库已经将其中一个或两个数据的变动写入磁盘,此时出现崩溃,一旦重启之后,数据库必须要有办法得知崩溃前发生过一次不完整的购物操作,将已经修改过的数据从磁盘中恢复成没有改过的样子,以保证原子性。已提交事务,写入前崩溃:程序已经修改完三个数据,但数据库还未将全部三个数据的变动都写入到磁盘,此时出现崩溃,一旦重启之后,数据库必须要有办法得知崩溃前发生过一次完整的购物操作,将还没来得及写入磁盘的那部分数据重新写入,以保证持久性。原创 2024-05-10 17:38:44 · 1292 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 008 数据库优化基本思路
哪些数据不适合放在数据库中1. 二进制数据;2. 流水队列数据;3. 超大文本;原创 2024-05-10 17:35:59 · 966 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 007 索引优化示例
下面是一张用户通讯表的表结构信息,这张表来源于真实企业的实际项目中,有接近500万条数据.原创 2024-05-09 14:55:54 · 820 阅读 · 2 评论 -
【MySQL 数据宝典】【索引原理】- 006 慢查询日志分析&优化
日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件.例如,嵌套循环中,如果小的循环在外层,则数据库连接只会发生5次,进行5000次操作,相比之下,如果大的循环在外层,则会导致1000次数据库连接,增加资源消耗。排序操作较为常见,如果排序字段在索引中,速度会更快,因为索引本身就是排好序的。如下图是慢日志里其中一条SQL的记录内容,可以看到有时间戳,用户,查询时长及具体的SQL等信息.如何选择合适的索引?原创 2024-04-28 10:10:15 · 1348 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 005 一文说明白 OrderBy 优化
如果 MySQL 认为内存足够大,会优先选择全字段排序,把需要的字段都放到 sort_buffer中, 这样排序后就会直接从内存里面返回查询结果了,不用再回到原表去取数据。MySQL 的一个设计思想:如果内存够,就要多利用内存,尽量减少磁盘访问。对于 InnoDB 表来说,rowid 排序会要求回表多造成磁盘读,因此不会被优先选择。原创 2024-04-28 10:09:16 · 824 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 004 优化示例-join & in &exist
多表关联查询时,第一个被处理的表就是驱动表,使用驱动表去关联其他表.驱动表的确定非常的关键,会直接影响多表关联的顺序,也决定后续关联查询的性能永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)为匹配的条件增加索引(减少内层表的循环匹配次数)增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫表次数就越少)减少不必要的字段查询(字段越少,join buffer 所缓存的数据就越多。原创 2024-04-28 09:56:40 · 1440 阅读 · 1 评论 -
【MySQL 数据宝典】【索引原理】- 003 用例子说明索引优化基础原则
最左前缀法则要遵守索引列上不计算范围之后全失效覆盖索引记住用。不等于、is null、is not null、or导致索引失效。like百分号加右边,加左边导致索引失效,解决方法:使用覆盖索引。原创 2024-04-28 09:54:27 · 786 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 002 示例+逐个字段学明白 Explain
type类型解释system不进行磁盘IO,查询系统表,仅仅返回一条数据const查找主键索引,最多返回1条或0条数据. 属于精确查找eq_ref查找唯一性索引,返回数据最多一条, 属于精确查找ref查找非唯一性索引,返回匹配某一条件的多条数据,属于精确查找,数据返回可能是多条.range查找某个索引的部分索引,只检索给定范围的行,属于范围查找. 比如: > 、 < 、in 、betweenindex查找所有索引树,比ALL快一些,因为索引文件要比数据文件小.ALL。原创 2024-04-26 10:27:14 · 1435 阅读 · 0 评论 -
【MySQL 数据宝典】【索引原理】- 001 索引原理分析 (AVL树、B-Tree、B+Tree)
B-Tree是一种平衡的多路查找树,B树允许一个节点存放多个数据. 这样可以在尽可能减少树的深度的同时,存放更多的数据(把瘦高的树变的矮胖)B-Tree中所有节点的子树个数的最大值称为B-Tree的阶,用m表示.一颗m阶的B树,如果不为空,就必须满足以下条件.m阶的B-Tree满足以下条件:每个节点最多拥有m-1个关键字(根节点除外),也就是m个子树根节点至少有两个子树(可以没有子树,有就必须是两个)分支节点至少有(m/2)颗子树 (除去根节点和叶子节点其他都是分支节点)原创 2024-04-26 10:24:52 · 885 阅读 · 0 评论 -
【MySQL 数据宝典】【内存结构】- 001 BufferPool
Buffer Pool 是 InnoDB 存储引擎用于缓存磁盘中页的内存区域,它的大小直接影响数据库的性能。默认情况下,Buffer Pool 的大小为 128MB,但可以根据服务器配置和需求进行调整。通过设置 MySQL 服务器配置文件中的参数来指定 Buffer Pool 的大小。举例:如果服务器有 512GB 内存,可以将数百GB分配给 Buffer Pool,以提高数据库读取性能。可在配置文件中设置参数,单位为字节。例如:[server][server]单位是字节。原创 2024-04-17 09:56:54 · 1601 阅读 · 0 评论 -
【MySQL 数据宝典】【存储引擎】- InnoDB 常用参数的优化技巧
一个大的日志缓冲区允许大量的事务在提交之前不写日志到磁盘。因此,如果你有很多事务的更新,插入或删除操作,通过设置这个参数会大量的减少磁盘I/O的次数数。建议: 在专用数据库服务器上,可以将缓冲池大小设置为服务器物理内存的60% - 80%.监控在线调整缓冲池的进度。原创 2024-04-24 11:08:56 · 1846 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- InnoDb 数据文件-Page结构、行记录格式
服务器为了描述一条记录而添加了一些额外信息(元数据信息),这些额外信息分为3类,分别是: 变长字段长度列表、NULL值列表和记录头信息.原创 2024-04-24 10:54:56 · 1278 阅读 · 0 评论 -
【MySQL 数据宝典】【线程模型】-IO Thread、Puge Thread介绍
通过异步IO,InnoDB能够在进行IO操作时不阻塞其他线程的执行,从而更高效地处理读写请求。作用是将脏数据刷新到磁盘,脏数据刷盘后相应的redo log也就可以覆盖,即可以同步数据,又能达到redo log循环使用的目的。InnoDB的Master Thread是主线程,担负着调度其他各个线程的重要任务,其优先级最高。而在后续版本中,read thread和write thread分别增大到了4个,总共有10个IO线程。,该命令将显示当前InnoDB引擎的详细状态信息,包括IO线程的数量和状态等。原创 2024-04-23 09:54:37 · 1499 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- 006 bin log 二进制日志的基本模式和参数设置
binlog是一个二进制格式的文件,用于记录语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是不会记录SELECT和SHOW这类操作。原创 2024-04-23 09:45:29 · 1450 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- 005 Undo log 撤销日志
提供回滚操作Undo Log实现了事务的原子性。在数据修改时,除了记录redo log外,还记录了相应的undo log。如果事务执行失败,可以利用undo log进行回滚。Undo Log是逻辑日志,记录了数据修改的逻辑操作,如delete操作对应的是insert操作,update操作对应相反的update操作。提供多版本控制(MVCC)MVCC通过Undo Log实现。当某行数据被其他事务锁定时,可以从undo log中获取该行记录之前的数据版本,从而实现了快照读。原创 2024-04-22 10:29:17 · 918 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- 003 双写缓冲区
这样在宕机重启时,即使发生数据页损坏,可以通过该页的副本来还原该页,然后再进行redo log重做,确保了数据页的可靠性。为了解决写失效问题,InnoDB实现了双写缓冲区,它位于系统表空间,是一个存储区域。双写缓冲区在写入过程中发生了宕机,数据页仍然有可能丢失。双写缓冲区的设计是为了。为啥写两次,刷一次数据文件保存数据不就可以了,为什么还要写共享表空间?默认情况下启用双写缓冲区,可以通过将。,但并不能完全消除它。原创 2024-04-19 09:49:48 · 867 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- 002 数据字典
我们平时使用 INSERT 语句向表中插入的那些记录称之为用户数据,MySQL只是作为一个软件来为我们来保管这 些数据,提供方便的增删改查接口而已。但是每当我们向一个表中插入一条记录的时候,MySQL先要校验一下插 入语句对应的表存不存在,插入的列和表中的列是否符合,如果语法没有问题的话,还需要知道该表的聚簇索引 和所有二级索引对应的根页面是哪个表空间的哪个页面,然后把记录插入对应索引的 B+ 树中。原创 2024-04-19 09:47:37 · 1033 阅读 · 0 评论 -
【MySQL 数据宝典】【磁盘结构】- 001 表空间介绍&优化建议
Log Buffer:日志缓冲区,用来保存要写入磁盘上log文件(Redo/Undo)的数据,日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘,当遇到BLOB或多行更新的大事务操作时,增加日志缓冲区可以节省磁盘I/O。LogBuffer空间满了,会自动写入磁盘。可以通过将innodb_log_buffer_size参数调大,减少磁盘IO频率。LogBuffer主要作用是: 用来优化每次更新操作之后都要写入redo log 而产生的磁盘IO问题.原创 2024-04-18 15:46:49 · 1587 阅读 · 0 评论 -
【MySQL 数据宝典】【内存结构】- 005 Log Buffer
Log Buffer:日志缓冲区,用来保存要写入磁盘上log文件(Redo/Undo)的数据,日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘,当遇到BLOB或多行更新的大事务操作时,增加日志缓冲区可以节省磁盘I/O。LogBuffer空间满了,会自动写入磁盘。可以通过将innodb_log_buffer_size参数调大,减少磁盘IO频率。LogBuffer主要作用是: 用来优化每次更新操作之后都要写入redo log 而产生的磁盘IO问题.原创 2024-04-18 15:38:21 · 311 阅读 · 0 评论 -
【MySQL 数据宝典】【内存结构】- 003 Change Buffer 详解
Change Buffer:写缓冲区,是针对页的更新优化措施。作用: 在进行DML操作时,如果请求的是 辅助索引(非唯一键索引)没有在缓冲池 中时,并不会立刻将磁盘页加载到缓冲池,而是在CB记录缓冲变更,等未来数据被读取时,再将数据合并恢复到BP中。ChangeBuffer占用BufferPool空间,默认占25%,最大允许占50%,可以根据读写 业务量来进行调整。参数innodb_change_buffer_max_size;原创 2024-04-18 09:55:27 · 1623 阅读 · 0 评论 -
【MySQL 数据宝典】【内存结构】- 002 Page管理机制
Buffer Pool 的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。原创 2024-04-17 21:24:08 · 1239 阅读 · 0 评论 -
mysql 5.7安装
centos7安装mysql5.7操作步骤下载mysql的repo源wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm安装源rpm -ivh mysql57-community-release-el7-8.noarch.rpm安装数据库yum install mysql-server...原创 2019-05-05 20:12:41 · 130 阅读 · 0 评论
分享