![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySql
文章平均质量分 86
陆焉识i
这个作者很懒,什么都没留下…
展开
-
MySQL 三大日志篇
1.redo log redo log有两种类型,分别分为物理重做日志和逻辑重做日志,大多数情况下都是物理重做日志,记录的是数据页的物理变化(实际的数据值)。 功能 保证事务的持久性。用于做崩溃恢复。 结构 在内存中的redo log buffer,和磁盘中的redo log file。 redo log buffer的基本单位log buffer block,512个字节。日志缓冲块的结构如下: 1. 原理 由于在一个事务中,要修改的页可能有多个,所以为了保证事务的原子性,这组被修改的页原创 2022-06-13 19:56:13 · 102 阅读 · 0 评论 -
MySQL innoDB三大特性
1.Insert Buffer/Change Buffer innoDB在1.0.x版本前使用的是insert buffer(只支持插入),之后升级成change buffer(支持增删改)。虽然支持的功能多了,但是本质上做法原理还是一样的。 结构 Change Buffer虽然叫做buffer,但是它并不是只存在内存中的。在内存中,它占用了Buffer Pool的一定比例的空间;在磁盘上,是系统表空间内的一棵B+树。 优化对象 只是针对普通二级索引(非聚簇索引,非唯一索引)的数据变更时的IO优化原创 2022-05-16 17:41:57 · 338 阅读 · 0 评论 -
MySQL Buffer Pool篇
原理 对于innoDB引擎来说,页是内存和磁盘交互的最小单位,也就是说,写入和读取都是以页为单位的。如果每次都为了读取或者修改一条数据而以页为单位发生内存和磁盘的交互,这种性能消耗是完全不可取的。 那如果把最小单位改成比页小呢? 假设找到了一个合适的最小单位来替换页,但在绝大多数时候,要修改的多条数据都是无序的,比如要改张三的年龄和李四的性别,这两条数据大概率不是连续的,也就意味着大量的随机IO,这种执行方法的效率也是极低的。 根据计算机的局部性原理,当读取一条数据时,接下来很大概率会读取与它相临的原创 2022-05-12 22:26:32 · 269 阅读 · 0 评论 -
MySQL表空间篇
Compact行格式 数据结构 1.变长字段长度列表:用来记录变长字段实际存储数据的长度 2.NULL值列表:用来记录允许为null的字段列表,通过0或1来标记某字段是否为null 3.记录头信息:5个字节。 · 预留位:头两位是两个预留位,保留。 · delete mask:1位。标记当前记录是否被删除了。 · min rec mask:1位。标记当前记录是否是B+树中非叶子节点的最小记录。 · n owned:该记录槽所拥有的记录数量。 · heap no:该记录在堆中的位置信息。原创 2022-05-08 18:08:26 · 1544 阅读 · 0 评论 -
MySQL调优篇
调优金字塔: 1.硬件和OS调优: 非DBA,只做简述。硬件有CPU、RAID卡,操作系统有IO调度策略、内存、设备轮转模式等。 2.MySQL调优: (1)配置优化 · 足够大的缓冲池(innodb_buffer_pool_size) 将热点数据尽可能多的存放到内存中,读取数据时就会尽可能少的访问磁盘。 · 最合适的redo log配置 增大redo_log的写入缓冲区大小(innodb_log_file_size)来降低redo log file的循环切换频率,一般是设置为缓原创 2022-05-04 10:32:02 · 173 阅读 · 0 评论 -
MySQL- explain篇
explain中的列 1.id列 id列的值是select的序列号,有几个select就有几个id,id大的先执行,id相同则从上往下执行。 2.select_type列 表示对应行是简单查询还是复杂查询。 · simple:简单查询。查询不包含子查询和union。 · primary:复杂查询的最外层查询。 · subquery:不相关子查询,优化器会采用物化的方式执行。 · dependent_subquery:相关子查询。 · derived:在from子句中的子查询,把结果放在临时原创 2022-05-03 15:49:47 · 590 阅读 · 0 评论 -
MySQL索引篇
索引合并: 1.intersection(交集索引合并) select * from table where index1_column = 'a' and index2_column='b'; 这条sql可能的执行方式有三种: · 通过index1_column列查到主键后回表,再通过index2_column='b'的过滤条件筛选 · 通过index2_column列查到主键后回表,再通过index1_column='b'的过滤条件筛选 · 通过index1_column列和index2_原创 2022-05-02 17:28:00 · 1013 阅读 · 0 评论 -
MySQL基础篇
表结构设计 1.范式设计 第一范式:字段不可切割 第二范式:所有属性都完全依赖于唯一主属性,不然会造成数据冗余,理解为一个实体 第三范式:每个属性和主属性都直接相关,不能间接相关,理解为实体不可再拆分 2.反范式设计 牺牲空间换取时间。通过一定的数据冗余来换取更高的性能和效率。 数据类型优化 (1)越小越好:占用的磁盘、内存、CPU越小 (2)简单就好:比如整型比字符串的操作代价更低 (3)尽量使用相同的属性来存相似或相关的值,尤其是关联的列 (4)尽量避免使用null 具体原创 2022-05-01 17:50:48 · 55 阅读 · 0 评论