mysql
文章平均质量分 81
Aiky哇
专注于数据库、go、性能优化,对待当下的态度,决定你未来的高度
展开
-
数据库内核面试中我不会的问题(6)
如果没有什么意外的话,应该是近期的最后一篇了。我也希望是最后一篇。。祝大家能找到心仪的工作。原创 2022-08-23 16:04:19 · 422 阅读 · 0 评论 -
MySQL之undo log
一个事务执行过程中可以分配4个Undo页面链表,同一时刻,不同事务拥有的Undo页面链表不同,整个系统中同一时刻存在很多个Undo页面链表,为了方便管理这些Undo页面链表,Innodb中设计了一个 Rollback Segment Header 的页面,这个页面中存放了各个Undo页面链表的first undo page的页号,这些页号被称为 undo slot,通过这些页号就可以方面的管理各个链表了。转载 2022-08-21 21:52:12 · 434 阅读 · 0 评论 -
MySQL之redo日志
InnoDB采用页为单位管理存储空间,我们对一张或多张表进行增删改查都必须将数据所在的页面从磁盘中加载到内存中,在数据库的持久性特性里,如果一个事务已经提交了,数据是不允许被丢失的,称为持久性,当我们在内存中修改完数据后,并且提交事务了,此时机器突然断电或其他原因,导致内存中的数据丢失了,这就不符合一致性的要求了,因此为了保证持久性,我们可以将数据写入磁盘后,再让事务返回提交成功,但是这么做会有一些问题:刷新完整的数据页太浪费。转载 2022-08-21 20:44:53 · 1802 阅读 · 0 评论 -
B+树及插入和删除操作详解
本节介绍了有关 B+树的查找、插入和删除操作,由于其更多的是用于文件索引系统,所以没有介绍具体地代码实现,只需要了解实现过程即可。转载 2022-08-20 20:14:40 · 2999 阅读 · 2 评论 -
图解B+树的插入过程
在叶子结点分裂时,假设分裂出来的左结点有2个记录,右节点有3个记录,中间key成为索引结点中的key,会成为一个父节点,分裂后的两个节点都指向了父结点(根结点)。根据这个插入过程,一个B+树的高度,是有一个节点能存储多少关键字,也就是索引决定的。分裂后,左结点2个关键字,右结点2个关键字,关键字16进入到父结点中,将分裂后的节点指向父结点,结果如下图所示。1.下面以一棵5阶B+树的插入过程,5阶B+树的节点最少2个key,最多4个key。...转载 2022-07-25 17:28:23 · 1751 阅读 · 1 评论 -
主键B+ Tree,二级索引B+ Tree及对应的查询过程分析
若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。简单来说,就是其开辟了一块空间,本来是一条一条回表的,其会将一条一条回表的PK放到一个线程对应的cache里面,放满了做一个操作,根据主键排序,排序之后,再去回表,是不是就是比较顺序了。结果集中的每一行都会以一个满足MySQL客户端/服务器通信协议的封包发送,再通过TCP协议进行传输,在TCP传输的过程中,可能对MySQL的封包进行缓存然后批量传输。mysqlinnodb是索引组织表,索引即数据,数据即索引,索引组织表中数据也是索引的一部分。...转载 2022-07-25 17:09:29 · 1291 阅读 · 0 评论 -
一文读懂什么是MySQL索引下推(ICP)
ICP(Index Condition Pushdown)是在MySQL 5.6版本上推出的查询优化策略,把本来由层做的索引条件检查下推给存储引擎层来做,以降低回表和访问存储引擎的次数,提高查询效率。为了理解ICP是如何工作的,我们先了解下没有使用ICP的情况下,MySQL是如何查询的:使用ICP的情况下,查询过程如下:先创建一张表,并插入记录查看一下表记录注意,这张表里创建了联合索引,假设我们想查询如下语句:3.1 不使用索引下推在不使用索引下推的情况下,根据联合索引“最左匹配”原则转载 2022-06-19 16:58:41 · 1076 阅读 · 0 评论 -
MySQL几个超时配置参数wait_timeout,net_read_timeout等
总结为:connect_timeout在获取连接阶段(authenticate)起作用,interactive_timeout和wait_timeout在连接空闲阶段(sleep)起作用,net_read_timeout和net_write_timeout在连接繁忙阶段(query)起作用。转载 2022-06-09 11:04:01 · 4241 阅读 · 0 评论 -
MySQL 优化之 index merge(索引合并)
深入理解 index merge 是使用索引进行优化的重要基础之一。理解了 index merge 技术,我们才知道应该如何在表上建立索引。1. 为什么会有index merge我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术。index merge 技术如果简单的说,其实就是:对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(intersect/union)。MySQL5.0..转载 2022-05-10 19:41:34 · 786 阅读 · 0 评论 -
linux下mysql8.0二进制安装,并更改登录密码
mysql8.0比mysql5.0增加了一些东西,然后一些参数也弃用了,没法完全按照以前的方法来安装。所以重新写一篇来记录自己安装mysql8.0的方法。这里直接使用的二进制文件包安装,想要源码安装的可以自行下载源码编译。下载mysql8.0二进制包这里直接使用的是编译之后的文件:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz也可以直接通过shell命令下.原创 2022-04-25 15:03:40 · 928 阅读 · 0 评论 -
使用wireshark来分析mysql tcpdump下来的包数据
上一篇介绍了tcpdump的使用方式:tcpdump的入门与使用格式,很好懂_Aiky哇的博客-CSDN博客tcpdump简介dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。实际操作来试试看。在linux上使用:tcpdump --help可以看到版本及使用介绍:原创 2022-04-13 15:18:23 · 699 阅读 · 0 评论 -
mysql握手链接,服务端到底发过来了什么?
目录mysql客户端与服务端的交互连接方式通信过程mysql认证包报文第一次握手报文第二次握手报文第三次握手报文mysql数据包格式参考 最近工作关系,想能不能增加mysql每次传输数据的行数来提升传输数据性能。所以最近开始研究mysql的数据传输协议。mysql客户端与服务端的交互连接方式mysql的主要连接方式有几种:SOCKET连接(Linux)目标 启动选项 默认值SERVER --enable-named-pipe --..原创 2022-04-08 15:51:03 · 1067 阅读 · 0 评论 -
Mysql中 /*[叹号] */含义
【标题规范】不让写/*!,我没的法子,实际是mysql /*! */原创 2022-01-13 18:13:47 · 3431 阅读 · 0 评论 -
Mysql 的【字符串】与【数值】相互转化
1、字符串转数字1.1、通过+0操作最简单的方式就是直接在字符串后面+0,就相当于直接把字符串转为数字类型了,下面可以看一下具体的操作,可以看到通过+0操作,成功将两个字符串转化为了数字,并得到了相加后的结果。语法:字符串+0还能用来字符串转数字进行排序。select * from orders order by (mark+0) desc1.2、CAST()函数使用CAST()函数,使用方式为CAST(value AS type);,下面可以看一下具体的操作例子,转载 2021-12-30 10:21:26 · 1788 阅读 · 0 评论 -
mysql8.0 hash join源码分析
hash_join_chunkHashJoinChunk是用来存储行并落盘的类型,表分区成小文件时也可以用。将列写入 HashJoinChunk 时,我们使用 StoreFromTableBuffers 将必要的列转换为适合存储在磁盘上的格式。方便的是,StoreFromTableBuffers 创建了一个连续的字节范围和相应的长度,可以轻松有效地将其写到文件中。从文件中读回行时,LoadIntoTableBuffers() 用于将行放回表记录缓冲区。具体用法如下:HashJoinCh原创 2021-10-13 16:42:51 · 563 阅读 · 0 评论 -
mysql8.0的hash join算法及其优化
概述&背景MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜。有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQL多用于简单的OLTP场景,并且在互联网应用居多,需求没那么紧急。另一方面可能是因为以前完全靠社区,这种演进速度毕竟有限,Oracle收购MySQL后,MySQL的发版演进速度明显加快了很多。HashJoin本身算法实现并不复杂,要说复杂,可能是优化器配套选择执行计划时,是否选择HashJoin,选择外表转载 2021-09-27 11:23:45 · 1419 阅读 · 1 评论 -
mysql的bit数组( bit(n) )类型解析
先明确:bit 类型不是对应true和false,也不是只有一位在网上能查到的比较多的关于bit的,只有单纯的bit位,而关于bit数组类型则比较少,由于工作需要,对bit数组进行了一些研究。bit类型在mysql的情况创建两张表:a表为1个bit位b表为1个64长度的bit数组位mysql> create table a(w bit);mysql> create table b(w bit(64));查看a表、b表结构mysql> desc a;+----原创 2021-07-28 16:55:20 · 1982 阅读 · 0 评论 -
数据库内核如何实现排序和聚合
本篇文章选自数据库内核杂谈系列文章。上篇文章中,我们着重介绍了对于一个 SQL 语句,数据库是怎么生成一个执行计划,并根据这个执行计划,一步一步地读取,计算并获得最后结果的。这一期,我们来聊一下两个非常重要的算子(operator, 上一期我把 operator 翻译成操作符,后来读了其他前辈写的文章,发现还是算子更贴切: 排序(Sort)和聚合(Aggregate)的实现。为什么要把这两个算子放在一起说呢?其实,它们之间有很多的共同点,比如都是 Blocking 的算子,即需要得到所有的输入 ..转载 2021-07-01 11:58:23 · 210 阅读 · 0 评论 -
千万不要为了“分库分表”而“分库分表”,优点和隐患
数据库瓶颈不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看, 就是可用数据库连接少甚至无连接可用,接下来就可以想象了(并发量、吞吐量、崩溃)。IO瓶颈 第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的IO,降低查询速度->分库和垂直分表 第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库 CPU瓶颈 第一种:SQl问题:如SQL中包含j转载 2021-06-15 11:44:23 · 1118 阅读 · 0 评论 -
mysql通讯协议的数据包格式
使用MySQL协议发送数据,有两个要求:将数据分成大小为(2^24−1)字节的数据包 给每个数据块加上一个包头由于连接的创建和释放都需要耗费资源,所以数据库这种交互频繁,且连接数量不需要特别大的应用场景,一般使用长连接。使用短连接尚能通过RST判断数据是否读完了,而长连接就不能这么做了,同时由于TCP的特点,数据读写会发生拆包、粘包。所以使用长连接传输数据,必须通过某种方法把要发送的数据告诉接收方。例如HTTP协议head里的CONTENT-LENGTH。也可以通过特殊的符号判断,不过由于消息里转载 2021-06-10 20:25:57 · 821 阅读 · 0 评论 -
TiDE+vscode部署调试tidb
" TiDE是Visual Studio Code扩展,使TiDB的开发变得轻而易举。还在编码,编译,将二进制文件复制到服务器,重新启动每个进程以及从各处的日志中获取信息的循环中吗?尝试TiDE,使TiDB开发体验再次精彩! "由于工作需要,需要熟悉tidb代码流程,想要通过源码调试来学习tidb如何处理一条sql。但是tidb的模块还挺多的,编译部署安装觉得有些麻烦,因此发现了一个非常好用的插件TiDE。我这里只是想看源码,不想做性能测试,因此是使用的默认配置,在...原创 2021-04-13 20:59:37 · 794 阅读 · 0 评论 -
mysql测试用,几十行小表
create database sb;use sb;CREATE TABLE student (id INT(10) NOT NULL UNIQUE PRIMARY KEY ,name VARCHAR(20) NOT NULL ,sex VARCHAR(4) ,birth YEAR,department VARCHAR(20) ,address VARCHAR(50));CREATE TABLE score (id INT(10) NOT NULL UNIQUE PRIMARY .原创 2021-04-13 18:10:38 · 148 阅读 · 0 评论 -
事务隔离级别在RR和RC下有何差异
为了保证文章知识体系的完整性,先简单解释下快照读,读提交,可重复读。快照读(Snapshot Read)MySQL数据库,InnoDB存储引擎,为了提高并发,使用MVCC机制,在并发事务时,通过读取数据行的历史数据版本,不加锁,来提高并发的一种不加锁一致性读(Consistent Nonlocking Read)。读提交(Read Committed)数据库领域,事务隔离级别的一种,简称RC它解决“读脏”问题,保证读取到的数据行都是已提交事务写入的它可能存在“读幻影行”问题,同一个事务.转载 2021-03-25 16:22:57 · 568 阅读 · 0 评论 -
一分钟让你搞明白 left join、right join和join的区别
一张图道清所有join的区别首先,我们先来建两张表,第一张表命名为kemu,第二张表命名为score:一、left join顾名思义,就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。如下:select *from kemuleft join score on kemu.id = score.id结果集:二、right join“右连接”,表1右连接..转载 2021-03-24 14:12:07 · 421 阅读 · 0 评论