
MySQL相关
文章平均质量分 93
hashcon
做自媒体技术分享很久了,大家的抬爱与支持让我很开心很感激,但是个人本来做这些也并不是为了收益,只是为了个人学习与传播知识帮助更多的人,所以我将全网所有账号全部收益,持续捐给各种公益项目,也算不辜负大家的抬爱,也是回报祖国对我的一番培养。
曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 核心源码,贡献过druid,Spring Cloud,dubbox,Apache RocketMQ,Apache Bookeeper 等多开源项目。
展开
-
CMU 15-445 数据库课程第三课文字版 - 存储1
熟肉视频地址:CMU数据库管理系统课程[熟肉]3.数据库存储结构1(上)CMU数据库管理系统课程[熟肉]3.数据库存储结构1(下)1. 课程大纲这门课主要是关于如何开发一个功能全面的数据库管理系统,而不是如何编写复杂的 SQL 查询以及设计出最合理的关系模型数据库表。这门课会告诉你从低往上设计一个数据库管理系统需要的这些技术栈层:磁盘管理(Disk Manager)缓存池管理(Buffer Pool Manager)访问方法(Access Method)操作执行(Operator.原创 2022-05-17 17:58:42 · 1046 阅读 · 0 评论 -
为什么我建议需要定期重建数据量大但是性能关键的表
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判。如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~本文是“为什么我建议”系列第三篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读,相信能让各位在面对高并发业务的时候避开一些坑。往期回顾:为什么我建议在复杂但是性能关键的表上所有查询都加上 force index为什么我.原创 2022-05-02 09:41:55 · 1007 阅读 · 0 评论 -
为什么我建议在复杂但是性能关键的表上所有查询都加上 force index
最近,又遇到了慢 SQL,简单的看了下,又是因为 MySQL 本身优化器还有查询计划估计不准的问题。SQL 如下:select * from t_pay_recordWHERE(( user_id = 'user_id1' AND is_del = 0 )) ORDER BY id DESC LIMIT 20这个 SQL 执行了 20 分钟才有结果。但是我们换一个 user_id,执行就很快。从线上业务表现来看,大部分用户的表现都正常。我们又用一个数据分布与这个用户相似的用户去查,原创 2022-02-26 19:35:56 · 594 阅读 · 0 评论 -
由一次 UPDATE 过慢 SQL 优化而总结出的经验
最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe7-4767-45e8-a5f5-72280c192faa', update_time = update_time where order_id in (select order_id from t_retailer_order_record force index (idx_archive_id) wh.原创 2021-12-20 22:01:43 · 1475 阅读 · 0 评论 -
这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了
今天收到运营同学的一个 SQL,有点复杂,尤其是这个 SQL explain 都很长时间执行不出来,于是我们后台团队帮忙解决这个 SQL 问题,却正好发现了一个隐藏很深的线上问题。select a.share_code,a.generated_time,a.share_user_id,b.user_count,b.order_count,a.share_order_id,b.rewarded_amountfrom t_risk_share_code a,(select count(d.原创 2021-08-07 11:26:04 · 441 阅读 · 0 评论 -
MySQL原理 - InnoDB引擎 - 行记录存储 - Off-page 列
本文基于 MySQL 8在前面的两篇文章,我们分析了 MySQL InnoDB 引擎的两种行记录存储格式:Compact 格式Redundant 格式在这里简单总结下:Compact 格式结构:变长字段长度表:包括数据不为NULL的每个可变长度字段的长度,并按照列的顺序逆序排列NULL 值列表:针对可以为 NULL 的字段,用一个 BitMap 来标识哪些字段为 NULL记录头信息:固定 5 字节,包括:无用位:2 bits,目前没用deleted_flag:1 bits,.原创 2021-07-07 10:14:02 · 352 阅读 · 0 评论 -
MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式
本文基于 MySQL 8在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中,我们继续介绍其他三种行格式。Redundant 行格式这个是最古老的,最简单粗暴的行格式了,现在基本上已经不用了,因为占用空间最多,从而导致内存碎片化最严重,是最低效的行格式了(针对现在varchar字段使用的更多,而对于 varchar 字段改变长度的更新大部分情况下就是将原有行的数据标记为已删除,.原创 2020-07-09 18:14:00 · 2923 阅读 · 0 评论 -
MySQL原理 - InnoDB引擎 - 行记录存储 - Compact 行格式
MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎,比如 InnoDB、MyISAM、Memory 等等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,目前OLTP业务的表如果是使用 MySQL 一般都会使用 InnoDB 引擎,这也是默认的表引擎。为了能说明 InnoDB 引擎的原理,我们必须先搞清楚 InnoDB 的存储结构,通过这些存储结构才能实现 InnoDB 的事务特性。首先我们来看看 InnoDB 表的一行数据是如何存储的。InnoDB是一个持久化的存储引擎,也就是原创 2020-06-30 20:31:42 · 16355 阅读 · 2 评论 -
MySQL原理 - 字符集与排序规则
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符集与比较规则通过show charset;命令,可以查看所有的字符集。以下仅展示了我们常用的字符集:+----------+---------------------------------+---------------------+--------+| Charset | Descrip原创 2020-06-11 17:51:02 · 3249 阅读 · 0 评论 -
MySQL分割一行为多行的思路
最近数据分析有需求,分析运营活动短信用户,但是发送短信的用户是通过 JSON 字符串数组存储在一个 text 字段的。内容类似于:["user1", "user2", "user3"....]数据分析想分析这些用户,那么就需要 in 这些用户查询。自己手动拼 SQL 太蛋疼,而且好几万几十万的用户,拼成SQL,复制粘贴也够蛋疼的。那么可以考虑将这一行分割为多行,作为一个字段。mysql.h...原创 2020-04-15 12:01:13 · 1627 阅读 · 0 评论 -
MySQL原理 - InnoDB表的限制
本文基于MySQL 5.7目前OLTP业务的表如果是使用MySQL一般都会使用InnoDB引擎,这也是默认的表引擎。那么这种引擎有什么限制呢?根据官方文档总结下:参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html在MySQL5.6.9以后的版本,一个表的最大列个数(包含虚拟列,虚拟列是MySQL5....原创 2019-08-19 20:02:11 · 880 阅读 · 0 评论 -
通过MySQL5.7子查询的坑联想到的MySQL查询优化规律与注意点
本文基于MySQL 5.7问题背景最近,发现业务线程卡死在读取数据库(MySQL 5.7),数据库CPU飙升到了100%,经过定位发现是下面这样一个SQL(由用户触发的查询,可以理解为查看这个群组的所有用户买过哪些商品)导致的:select * from merchandise where id in ( select merchandise_id from indent where ...原创 2018-11-20 20:16:01 · 3504 阅读 · 0 评论 -
MySQL源代码阅读调试 - 1. 环境搭建
最近需要阅读下MySQL源代码,所以写这系列博客记录下。 搭调试环境真是比较蛋疼,公司基本Java开发,这里回到C++。。。 用了两天晚上,尝试了VS2013,Eclipse CDT,CodeBlock还有GDB。 GDB比较好搭建,将带Boost库的源代码扔到虚拟机(CentOS 7.0,安装配置桌面web服务器开发机配置,什么软件都装齐了)上,GDB命令搞得飞起。但是,GDB还是比较反人类原创 2016-05-18 21:59:52 · 11935 阅读 · 6 评论