
mysql
文章平均质量分 86
埃泽漫笔
OceanBase开源项目ODC(OceanBase Developer Center)的核心贡献者,Github地址:https://github.com/oceanbase/odc,希望大家能赏脸支持下我们OceanBase公司的开源项目,点亮一颗小星星就行。
Maven中央仓库OceanBase开源组件 https://central.sonatype.com/artifact/com.oceanbase/db-browser 和 https://central.sonatype.com/artifact/com.oceanbase/ob-sql-parser 的核心贡献者。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL调优
慢查询日志,顾名思义,就是查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。如何开启,我们稍后再说。有了慢查询语句后,就要对语句进行分析。原创 2025-06-08 23:21:55 · 882 阅读 · 0 评论 -
性能调优案例
原因很简单,就是索引的大小。分析发现,通过FORCE INDEX (idx_name_Age_Gender) 强制使用三键的联合索引索引,它的成本和两键的联合索引是一样的!这里的话(因为之前已经有一个联合索引,不过这个联合索引覆盖不了status),索引执行计划分析,会使用上述的联合索引(复合索引)要造成死锁,肯定是要多个线程(2个及以上)去抢锁,并且抢的锁至少要有2把,同时是手动事务,每个线程尝试抢相同的锁,但是顺序不同!其他的AI查询,出现一个错误的答案:索引的选择性,索引的选择度。原创 2025-06-08 23:16:52 · 989 阅读 · 0 评论 -
MySQL8新特性底层原理
MySQL 8.0开始真正支持降序索引 (descendingindex)。只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。另外MySQL8.0不再对GROUP BY操作进行隐式排序。在MySQL中创建一个t2表如果是5.7中,则没有显示升序还是降序信息我们插入一些数据,给大家演示下降序索引的使用看下索引使用情况我们在5.7对比一下这里说明,这里需要一个额外的排序操作,才能把刚才的索引利用上。我们把查询语句换一下MySQL8中使用了。原创 2025-06-07 23:35:13 · 941 阅读 · 0 评论 -
事务底层与高可用原理
在聚簇索引中,记录是按照主键值的大小连成了一个单向链表的,如果我们更新了某条记录的主键值,意味着这条记录在聚簇索引中的位置将会发生改变,比如你将记录的主键值从1更新为10000,如果还有非常多的记录的主键值分布在1 ~ 10000之间的话,那么这两条记录在聚簇索引中就有可能离得非常远,甚至中间隔了好多个页面。更新记录时,对于被更新的每个列来说,如果更新后的列和更新前的列占用的存储空间都一样大,那么就可以进行就地更新,也就是直接在原记录的基础上修改对应列的值。往这张表中插入多条记录。原创 2025-06-06 23:28:53 · 820 阅读 · 0 评论 -
InnoDB引擎底层解析
InnoDB的内存结构和磁盘存储结构图总结如下:其中的Insert/Change Buffer主要是用于对二级索引的写入优化,Undo空间则是undo日志一般放在系统表空间,但是通过参数配置后,也可以用独立表空间存放,所以用虚线表示。原创 2025-06-06 23:23:10 · 471 阅读 · 0 评论 -
MySQL的执行原理-下篇
MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。I/O成本我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。CPU成本读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。对于InnoDB存储引擎来说,页是磁盘和内存之间交互的基本单位。原创 2025-06-06 23:20:11 · 980 阅读 · 0 评论 -
MySQL的执行原理-上篇
连接的本质就是把各个连接表中的记录都取出来依次匹配的组合加入结果集并返回给用户。所以我们把e1和e2两个表连接起来的过程如下图所示:这个过程看起来就是把e1表的记录和e2的记录连起来组成新的更大的记录,所以这个查询过程称之为连接查询。连接查询的结果集中包含一个表中的每一条记录与另一个表中的每一条记录相互匹配的组合,像这样的结果集就可以称之为笛卡尔积。因为表e1中有3条记录,表e2中也有3条记录,所以这两个表连接之后的笛卡尔积就有3×3=9行记录。原创 2025-06-05 23:31:01 · 655 阅读 · 0 评论 -
MySQL中的系统库
MySQL有几个系统数据库,这几个数据库包含了MySQL服务器运行过程中所需的一些信息以及一些运行状态信息,我们现在稍微了解一下。这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些是一些描述性信息,称之为元数据。sys。原创 2025-06-05 23:17:34 · 832 阅读 · 0 评论 -
MySQL体系架构
使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd的扩展名而已,所以完整的文件名称长这样:表名.ibd。这个文件是所谓的自扩展文件,也就是当不够用的时候它会自己增加文件大小,当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的ibdata1这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,我们也可以把系统表空间对应的文件路径不配置到数据目录下,甚至可以配置到单独的磁盘分区上。原创 2025-06-01 23:09:44 · 1164 阅读 · 0 评论 -
MySQL8新特性
一个staff表,里面有id,有name还有一个 m_id,这个是对应的上级id。数据如下:如果我们想查询出每一个员工的上下级关系,可以使用以下方式。原创 2025-06-01 22:51:53 · 881 阅读 · 0 评论 -
MySQL中的锁
IS、IX锁是表级锁,它们的提出仅仅为了在之后加表级别的S锁和X锁时可以快速判断表中的记录是否被上锁,以避免用遍历的方式来查看表中有没有上锁的记录。就是说其实IS锁和IX锁是兼容的,IX锁和IX锁是兼容的。我们画个表来看一下。原创 2025-05-31 23:39:40 · 842 阅读 · 0 评论 -
事务和事务的隔离级别
1、如果被访问版本的trx_id属性值与ReadView中的creator_trx_id值相同,意味着当前事务在访问它自己修改过的记录,所以该版本可以被当前事务访问。2、如果被访问版本的trx_id属性值小于ReadView中的min_trx_id值,表明生成该版本的事务在当前事务生成ReadView前已经提交,所以该版本可以被当前事务访问。原创 2025-05-31 23:35:54 · 1018 阅读 · 0 评论 -
MySQL中的索引
能表示的整数范围当然也是依次递增,如果我们想要对某个整数列建立索引的话,在表示的整数范围允许的情况下,尽量让索引列使用较小的类型,比如我们能使用INT就不要使用BIGINT,能使用NEDIUMINT就不要使用INT,这是因为数据类型越小,在查询时进行的比较操作越快(CPU层次)数据类型越小,索引占用的存储空间就越少,在一个数据页内就可以放下更多的记录,从而减少磁盘/0带来的性能损耗,也就意味着可以把更多的数据页缓存在内存中,从而加快读写效率。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。原创 2025-05-28 23:24:16 · 948 阅读 · 0 评论 -
数据库基础知识
范式来自英文Normal Form,简称NF。实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。原创 2025-05-27 22:43:22 · 984 阅读 · 0 评论 -
什么是索引下推
索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的次数。ICP 适用于 MYISAM 和 INNODB,本篇的内容只基于 INNODB。原创 2025-02-19 23:26:31 · 505 阅读 · 0 评论 -
MySQL 为什么选择B+树作为底层数据结构
MySQL的索引机制中,有一点可谓是路人皆知,既默认使用B+树作为底层的数据结构。有人会说树结构是以二分法查找数据,所以会在很大程度上提升检索性能,这点确实没错,但树结构有那么多,但为什么要选择B+树呢?而不选择二叉树、红黑树或B树呢?下面一起聊一聊这个话题。原创 2025-02-19 22:57:29 · 1178 阅读 · 0 评论 -
truncate、delete、drop的区别
●TRUNCATE:快速清空表,但保留结构。适用于需要清空但不删除表的场景。●DELETE:逐行删除数据,可以选择性删除某些记录。适用于只想删除部分数据的场合,且支持事务。●DROP:删除整个表定义及其所有数据。适用于不再需要表结构或其数据的情况。选择哪个语句取决于你的需求是否涉及数据完整性、安全性、性能优化或是事务处理。原创 2025-02-17 23:44:34 · 336 阅读 · 0 评论 -
count(1)、count(*)与count(列名) 的区别
在 SQL 中,COUNT() 函数用于统计行的数量。不同的用法 (COUNT(1), COUNT(*), COUNT(column_name)) 具有略有不同的行为和性能表现。原创 2025-02-17 23:35:55 · 360 阅读 · 0 评论 -
MySQL的深度分页如何优化
在MySQL中,当涉及到深度分页时(offset较大),性能可能会显著下降。这是因为MySQL需要扫描和跳过大量行才能到达所需的偏移量。这会导致大量的磁盘I/O和内存消耗,进而影响查询性能。原创 2025-02-08 23:49:47 · 386 阅读 · 0 评论 -
MySQL InnoDB的MVCC实现机制
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读在学习MVCC多版本并发控制之前,我们必须先了解一下,什么是MySQL InnoDB下的当前读和快照读?原创 2025-02-08 23:17:49 · 1262 阅读 · 0 评论 -
MySQL中like模糊查询如何优化
在MySQL中,LIKE 模糊查询可能会导致性能问题,特别是当使用通配符 % 开头时,因为这通常会导致全表扫描。原创 2025-02-07 23:46:45 · 253 阅读 · 0 评论 -
查找数据过多,会不会把数据库内存打爆?
最近被问到这样一个问题:我的主机内存只有100G,现在要对一个200G的大表做全表扫描,会不会把数据库主机的内存用光了?顿时有点无语,很明显不会啊,MySQL 逻辑备份就是做整库扫描,如果这样就会把内存吃光,逻辑备份不是早就挂了,那为什么不会打爆呢?原创 2025-02-07 23:41:21 · 1258 阅读 · 0 评论 -
MySQL NULL 值的 5 大致命陷阱及解决方案
MySQL 中 NULL 值的处理是一个容易被忽视但又非常重要的问题。通过本文的分析和解决方案,希望你能更好地理解和应对 NULL 值问题。在实际开发中,尽量避免使用 NULL 值,并遵循最佳实践,才能让你的数据库设计更加健壮、高效。原创 2025-02-06 23:39:34 · 1149 阅读 · 0 评论 -
Join算法详解
在数据库开发中,JOIN是多表查询的核心操作,其性能直接影响整个系统的效率。MySQL 提供了多种 JOIN 算法来处理表之间的连接操作,包括●嵌套循环连接(Nested Loop Join)●索引嵌套循环连接(Index Nested Loop Join)●块嵌套循环连接(Block Nested Loop Join)●哈希连接(Hash Join)●排序合并连接(Sort-Merge Join)这些算法各有优劣,适用于不同的场景。原创 2025-02-06 23:19:45 · 818 阅读 · 0 评论