MySQL
文章平均质量分 80
数据库内核
这个作者很懒,什么都没留下…
展开
-
MySQL基础知识——MySQL索引
索引的意义:在大量数据中,加速访问少量特定数据;使用索引的前提条件:1)索引块数量小于数据块数量;2)索引键有序,故可以使用二分查找等高效的查找方式;(提升查找效率)3)索引文件足够小,能够长期存放在内存缓冲区中;(减少磁盘IO)注:当查询数据量超过一定比例时,全表扫描可能比走索引更高效。原创 2024-04-26 20:12:16 · 877 阅读 · 0 评论 -
MySQL基础知识——MySQL事务
在视图A、B、C里面,这一个记录的值分别是1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC);当数据库上有多个事务同时执行的时候, 就可能出现脏读(dirtyread) 、 不可重复读(non-repeatable read) 、 幻读( phantom read) 的问题, 为了解决这些问题, 就有了“隔离级别”的概念。1)每行数据有多个版本,按照事务ID倒序排列,每次事务更新数据时,会生成一个新的数据版本,并在版本中记录事务ID,即row trx_id;原创 2024-04-13 19:34:24 · 1423 阅读 · 1 评论 -
MySQL基础知识——MySQL日志
一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。那么, 一条更新语句的执行流程又是怎样的呢?下面我们从一个表的一条更新语句进行具体介绍:首先, 可以确定的说, 查询语句的那一套流程, 更新语句也是同样会走一遍。更新语句的执行流程:1)连接器连接数据库;2)分析器通过词法分析和语法分析直到这是一条更新语句;3)优化器决定1使用ID这个索引;4)执行器负责具体执行,找到这一行,然后更新。原创 2024-04-13 17:05:41 · 1000 阅读 · 0 评论 -
MySQL基础知识——MySQL架构
看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样, 对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。我们看到的只是输入一条语句, 返回一个结果, 却不知道这条语句在MySQL内部的执行过程。原创 2024-04-13 16:54:42 · 731 阅读 · 0 评论 -
Ubuntu快捷安装MySQL
注:设置完密码后,后续如果使用 mysql -uroot -h127.0.0.1 -pkingsoft. -P3306(可使用 mysql -uroot -h localhost -pkingsoft. -P3306 命令代替)命令连接mysql时,可能会报错。注:如果 /etc/my.cnf 文件存在,则优先使用该文件,如果 /etc/my.cnf 文件不存在,则使用 /etc/mysql/my.cnf 文件,以此类推。注1:如果不加127.0.0.1,则本地proxy无法连接到mysql。原创 2024-04-11 18:47:29 · 597 阅读 · 0 评论 -
MySQL 主从复制部署(8.0)
主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。它包括两种类型的数据库服务器:1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操作(插入、更新、删除)都在主数据库上执行。主数据库负责维护数据的一致性,并将写操作的变更记录下来。2)从数据库(Slave):从数据库是只读副本,它从主数据库中复制数据。承担一部分主库的的读数据压力,从而减轻了主数据库的负担。从数据库可以有多个,构成一个复制链,其中每个从数据库都从前一个从数据库中复制数据。原创 2024-04-10 18:46:06 · 972 阅读 · 0 评论 -
物理查询优化(二):两表连接算法(附具体案例及代码分析)
Hash Join 是一种执行连接的方法,如下图所示:选择合适的连接参与表作为内表(build table),构建hash表;然后使用另外一个表(probe table)的每一条记录去探测第一步已经构建完成的哈希表寻找符合连接条件的记录;输出匹配后符合需求的记录;排序归并连接算法又称归并排序连接算法,简称归并连接算法。归并连接算法需要首先对两个表按照关联的字段进行排序,然后分别从两个表中取出一行数据进行匹配,如果合适放入结果集;原创 2024-03-23 17:34:11 · 1410 阅读 · 0 评论 -
Etcd 介绍与使用(入门篇)
etc (基于 Go 语言实现,)在 Linux 系统中是配置文件目录名;etcd 就是配置服务;etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基于此,etcd 设计为提供高可用、强一致性的小型** kv 数据存储**服务。项目当前隶属于 CNCF 基金会,被包括 AWS、Google、Microsoft、Alibaba 等大型互联网公司广泛使用;原创 2024-03-17 16:45:53 · 1760 阅读 · 0 评论 -
物理查询优化(一):索引的使用(案例分析)
从上述 查询执行计划来看,尽管连接条件 a1 = b1 中的 a1 列和 b1 列都是索引列,但在表 a 中使用了顺序扫描,在表 b 中使用了索引扫描。从查询执行计划来看,a1 和 b1 都走了索引,能走索引的原因是在连接条件中,出现了 a1 = 1 条件,使得查询优化器可以根据 ”常量传递“ 优化技术推知 b1 = 1,所以在表 a 和 b 上可以各自使用索引扫描。9)对表做查询,有索引列对象作为过滤条件,操作符是范围操作符 ,可做索引扫描(PG 不可做索引扫描),且可走 ICP下推;原创 2024-02-27 21:24:27 · 579 阅读 · 0 评论 -
GDB 调试 MySQL 源码
说明:执行完启动命令后会直接跳转到 “--Type for more, q to quit, c to continue without paging--” 直接回车即可!回车后,如果出现:Reading symbols from /usr/local/mysql80/bin/mysqld...,则说明启动成功!直接回车,便可进入语句:select * from t1 where id >8 limit 2, 2;由上图可知,调试进入了 is_cond_match_ranges 函数的第一行!原创 2024-02-21 09:57:48 · 554 阅读 · 0 评论 -
Sysbench 性能测试(小白快速上手)
Sysbench 是一个在Linux系统上进行性能测试和基准测试的工具。它可以用于评估计算机系统的各种性能指标,如 CPU 性能、内存性能、文件 I/O性 能和数据库性能等。Sysbench 提供了多种测试模式和选项,可以帮助用户模拟不同负载条件下的性能表现,从而有助于优化系统配置和应用程序性能。1)Sysbench 附带了以下捆绑的基准测试oltp_*.lua:类似oltp的数据库基准的集合fileio:文件系统级基准测试cpu:简单的cpu基准测试memory:内存访问基准。原创 2024-02-06 20:10:23 · 1549 阅读 · 0 评论 -
InnoDB 锁系统(小白入门)
锁是数据库系统区别于文件系统的一个关键特性。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。虽然数据库系统做的越来越类似,但有多少种数据库,就可能有多少种锁的实现方法。对于 MyISAM 引擎,其锁是表锁设计。并发情况下的读没有问题,但是并发插入时的性能就要差一些,若插入是在“底部”,MyISAM 存储引擎还是有一定的并发写入操作。对于 Microsoft SQL Server 数据库,在 2005 版本之前其都是页锁。相对表锁的 MyISAM 引擎来说,并发性能有所提高。原创 2024-02-04 21:47:22 · 641 阅读 · 0 评论 -
tcpdump、wireshark 抓包分析(小白快速上手)
网络世界中的数据包一般都是不可见的,导致在学习计算机网络的时候会觉得其非常抽象,加大了学习的难度。自从有了网络包分析工具:tcpdump 和 Wireshark,使不可见的数据包得以可视化。问题:tcpdump 和 wireshark 有什么区别?tcpdump 和 wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。1)tcpdump 仅支持命令行格式使用,常在 Linux 服务器中抓取和分析网络包;原创 2024-01-23 22:06:33 · 1364 阅读 · 1 评论 -
MySQL 协议(非常详细适合小白学习)
MySQL 查询过程大致如下:1)客户端与服务器端建立连接;2)客户端登陆 MySQL;3)客户端向服务器端发起一条请求;4)服务器端先检查查询缓存,如果命中缓存,则直接返回结果;否则交给下一阶段;5)服务器进行 SQL 解析并生成解析树及执行计划(初始执行计划);6)服务器对解析树进行查询优化(RBO、CBO)并生成最终执行计划;7)MySQL 根据执行计划,调用相应 API,以进行数据的读取;8)将从存储引擎读取的结果返回给客户端,并缓存查询结果。原创 2024-01-15 22:54:09 · 1525 阅读 · 0 评论 -
JDBC PrepareStatement 的使用(附各种场景 demo)
1)PreparedStatement 继承自 Statement ,是 Statement 的一种扩展;2)PreparedStatement 特点:使用 PreparedStatement 可以执行动态参数化 sql(在 sql 语句中用占位符?原创 2024-01-12 18:56:55 · 1819 阅读 · 0 评论 -
MVCC 并发控制原理-源码解析(非常详细)
1)脏读:一个事务读取到另一个事务更新但还未提交的数据,如果另一个事务出现回滚或者进一步更新,则会出现问题。2)不可重复读:在一个事务中两次次读取同一个数据时,由于在两次读取之间,另一个事务修改了该数据,所以出现两次读取的结果不一致。3)幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。要解决这些并发事务带来的问题,一个比较简单粗暴的方法是加锁,但是加锁必然会带来性能的降低,因此 MySQL 使用了 MVCC 来提升并发事务下的性能。原创 2024-01-02 22:04:50 · 1094 阅读 · 0 评论 -
MySQL 快捷登陆
通过将 MySQL 登录命令添加到环境变量并创建别名,您可以更方便地使用自定义的命令来登录 MySQL 数据库。注意:请确保将 `/usr/local/mysql57` 替换为您的 mysql 安装路径。现在,您可以使用 `mysql57` 命令来登录 MySQL。原创 2023-12-08 18:34:55 · 590 阅读 · 0 评论 -
MySQL Server 层和引擎层是如何交互的
之所以定义 2 个 bit 字段,是为了测试 bit 类型的字段,定义的 bit 位数不是 8 的整数倍时,是不是会把多出来的那些 bit 存储到 字段值 NULL 标记区域中,后来发现,只有 MyISAM、NDB 存储引擎才会这样处理,InnoDB 中 bit 字段是按 char 存储的,bit 位数不是 8 的整数倍时,多出来的 bit 还需要占用 1 字节,比如:bit(17) 需要占用 3 字节。如果 c1 字段的实际内容长度比字段内容最大字节数小,会挨着刚刚写入的内容,再写入一定数量的空格。原创 2023-12-06 22:53:21 · 1018 阅读 · 0 评论 -
MySQL 性能优化
如果没有索引,数据库就只能扫描整个员工表,然后依次判断每个数据记录中的员工编号是否等于5并且返回满足条件的数据。这种查找数据的方法被称为**全表扫描**(Full Table Scan)。全表扫描最大的一个问题,就是当表中的数据量逐渐增加时性能随之明显下降,因为磁盘 I/O 是数据库最大的性能瓶颈。当表中的数据量很小(例如配置表),或者查询需要访问表中大量数据(数据仓库),索引对查询的优化效果不会很明显。为了解决大量磁盘访问带来的性能问题,MySQL引入了一个新的数据结构:索引(Index)。原创 2023-12-02 16:34:15 · 957 阅读 · 0 评论 -
MySQL 事务
事务就是要保证一组数据库操作, 要么全部成功, 要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道, MySQL是一个支持多引擎的系统, 但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务, 这也是MyISAM被InnoDB取代的重要原因之一。原创 2023-11-30 20:19:37 · 1053 阅读 · 0 评论 -
MySQL 生僻概念汇总
在数据库中,索引是一种用于提高查询效率的数据结构。当执行查询操作时,数据库可以使用索引来快速定位和访问所需的数据。"将索引游标定位到句柄中指定的索引"这句话的意思是,数据库会使用一个称为游标的指针或标记,将其定位到指定的索引位置。这个过程通常发生在执行索引读取操作时,即根据索引的值来检索数据。语句中的"游标定位"指的是将游标移动到指定位置的操作。在数据库中,游标可以被视为一个指向查询结果集中的当前行的指针。通过移动游标,您可以在结果集中定位到不同的行,并执行相应的操作,比如读取行的数据。原创 2023-11-29 19:55:24 · 1109 阅读 · 0 评论 -
MySQL 索引类型
索引是一种用于提高数据库查询性能的数据结构。它是在表中一个或多个列上创建的,可以加快对这些列的数据检索速度。索引的作用是通过创建一个额外的数据结构,使得数据库可以更快地定位和访问数据。当执行查询语句时,数据库可以使用索引来快速定位满足查询条件的数据行,而不需要逐行扫描整个表。这样可以大大减少查询的时间和资源消耗。需要注意的是,虽然索引可以提高查询性能,但过多或不合理的索引也会带来一些负面影响。索引需要占用额外的存储空间,并在插入、更新和删除操作时增加了维护成本。原创 2023-11-28 21:29:05 · 1127 阅读 · 1 评论 -
Clion+Ubuntu(WSL)+MySQL8.0开发、调试环境搭建
该命令的目的是创建一个名为mysql的系统用户,并将其添加到mysql用户组中。说明:初始化文件 my.cnf 可以放在不同的文件夹下(一台机器上装多个 mysql 时,可以在不同的文件夹下创建 my.cnf),但初始化命令中使用到的 my.cnf 路径要与其保持一致;初始化完成后,找到 mysql 安装目录下的 data 文件夹,初始化密码在 mysqld.log 日志中,自行找到即可,然后用初始密码进行登陆;)并下载 MySQL 8.0 的源码包(mysql-boost-8.0.31.tar.gz)。原创 2023-11-27 21:25:21 · 1540 阅读 · 3 评论 -
VsCode 调试 MySQL 源码
3. 使用 VsCode 打开 MySQL 源码。7. 输入上述查询的 MySQL 进程号,回车。10. 在终端执行 SQL 命令,即可调试。9. 在 VsCode 中手动设置断点。6. 点击 Debug mysqld。8. 进入 MySQL 调试环境。2. 查看 MySQL 进程号。1. 启动 MySQL。5. 点击调试运行按钮。原创 2023-11-27 21:17:09 · 1146 阅读 · 0 评论 -
MySQL 优化器 ICP 下推(让你彻底理解 ICP)
ICP(Index Condition Pushdown,索引下推),是 MySQL 5.6 版本推出的功能,用于优化 MySQL 查询。ICP 可以减少存储引擎查询回表的次数以及 MySQL server 层访问存储引擎的次数。ICP 的目标是减少整行记录读取的次数,从而减少 I/O 操作。原创 2023-11-24 22:28:01 · 1276 阅读 · 0 评论 -
MySQL 优化器 MRR
MRR 的全称是 Multi-Range Read Optimization,是优化器将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手段,咱们对比一下 mrr=on & mrr=off 时的执行计划:可以看到 extra 的输出中多了 “Using MRR” 信息,即使用了 MRR Optimization IO 层面进行了优化,减少 IO 方面的开销,更详细的说明可以参考。原创 2023-11-24 22:08:20 · 1365 阅读 · 0 评论 -
Ubuntu(WSL2) 源码安装 mysql8.0/mysql5.7
初始化文件 my.cnf 可以放在不同的文件夹下(一台机器上装多个 mysql 时,可以在不同的文件夹下创建 my.cnf),但初始化命令中使用到的 my.cnf 路径要与其保持一致;初始化完成后,找到 mysql 安装目录下的 data 文件夹,初始化密码在 mysqld.log 日志中,自行找到即可,然后用初始密码进行登陆;my.cnf文件中的 /usr/local/mysql 为mysql安装路径,根据自己情况进行更改,该mysql安装目录为:/usr/local/mysql;原创 2023-11-11 00:31:50 · 1502 阅读 · 0 评论 -
mysql8.0.31 源码阅读
虚析构函数(Virtual Destructor)是C++中的一个特殊函数,用于在继承关系中正确释放资源。当基类指针指向派生类对象时,如果基类的析构函数不是虚析构函数,那么在使用 `delete` 删除基类指针时,只会调用基类的析构函数,而不会调用派生类的析构函数,这可能导致派生类中的资源无法正确释放,造成内存泄漏。为了解决这个问题,可以将基类的析构函数声明为虚析构函数。虚析构函数使用 `virtual` 关键字进行声明,它允许在通过基类指针删除对象时,调用正确的析构函数。原创 2023-10-05 16:10:23 · 381 阅读 · 0 评论 -
MySQL 启动失败:Can‘t connect to local MySQL server through socket ‘/usr/local/mysql/data/mysql.sock‘
CentOS7 使用源码安装完 MySQL8.0.31 后,出现启动失败问题!!!原创 2023-07-31 17:02:22 · 1826 阅读 · 0 评论 -
MySQL学习笔记 ------ 常见约束
CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查------事实上在mysql中不支持。gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查------事实上在mysql中不支持。【constraint 约束名】 约束类型(字段名) ---【constraint 约束名】意思是可省略,不起名时会有默认名,即默认字段名。id INT PRIMARY KEY,#主键---约束为学号。原创 2023-07-26 08:47:28 · 160 阅读 · 0 评论 -
MySQL学习笔记 ------ 数据类型
char char(M) 最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费 高。varchar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省 低。① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字。③定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用。所选择的类型越简单越好,能保存数值的类型越小越好。原创 2023-07-26 08:46:35 · 154 阅读 · 0 评论 -
MySQL学习笔记 ------ 库和表的管理
alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;create database [if not exists]库名;#创建新库/表的通用写法------先把旧的删一遍------bName VARCHAR(20),#图书名。#仅仅复制某些字段-----非零为真-----列名 列的类型【(长度) 约束】,列名 列的类型【(长度) 约束】,列名 列的类型【(长度) 约束】,列名 列的类型【(长度) 约束】CREATE TABLE 表名();原创 2023-07-26 08:45:39 · 474 阅读 · 0 评论 -
MySQL学习笔记 ------ 数据的增、删、改
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2),(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);,(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2)VALUES(18,'张飞','男',NULL,'119',NULL,NULL);原创 2023-07-26 08:44:38 · 143 阅读 · 0 评论 -
MySQL学习笔记 ------ 联合查询
SELECT id,cname FROM t_ca WHERE csex='男'要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时。2、要求多条查询语句的查询的每一列的类型和顺序最好一致。2、要求多条查询语句的查询的各列类型、顺序最好一致。2、适用于查询多个表的时候,查询的列基本是一致。#-----查询语句的执行顺序------#1、要求多条查询语句的查询列数是一致的!#------联合查询总结------#LIMIT 起始条目索引,条目数;1、要求多条查询语句的查询列数必须一致。原创 2023-07-25 22:47:00 · 208 阅读 · 0 评论 -
MySQL学习笔记 ------ 分页查询
----offse为零时可省略。应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求。offset 要显示条目的起始索引(起始索引从0开始)#案例3:有奖金的员工信息,并且工资较高的前10名显示出来。要显示的页数 page,每页的条目数size。假如要显示的页数为page,每一页条目数为size。OFFSET代表的是起始的条目索引,默认从0卡死。#------分页查询总结------#size 要显示的条目个数。#案例2:查询第11条——第25条。当要查询的条目数太多,一页显示不全。原创 2023-07-25 22:46:03 · 237 阅读 · 0 评论 -
MySQL学习笔记 ------ 子查询
案例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工 的员工号、姓名、job_id 以及salary。#案例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary。#5. 查询在部门的location_id为1700的部门工作的员工的员工号。#(2)查询在部门的location_id为1700的部门工作的员工的员工号。#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名。原创 2023-07-25 22:45:20 · 1467 阅读 · 2 评论 -
MySQL学习笔记 ------ 连接查询
//----------连接查询总结----------//原创 2023-07-25 22:44:13 · 293 阅读 · 0 评论 -
MySQL学习笔记 ------ 分组查询
//----------分组查询----------//原创 2023-07-25 22:42:37 · 700 阅读 · 1 评论 -
MySQL学习笔记 ------ 分组函数
//----------分组函数----------//原创 2023-07-25 22:41:43 · 722 阅读 · 0 评论 -
MySQL学习笔记 ------ 常见函数
//----------常见函数----------//原创 2023-07-25 22:40:44 · 371 阅读 · 0 评论