
MySQL
文章平均质量分 80
cpuCode
站在巨人的肩上行走 https://github.com/CPU-Code
展开
-
MySQL 导航
基本架构 日志系统 InnoDB 刷脏页 InnoDB/Memory 事务隔离 索引 全局锁 间隙锁 count 内部临时表 全表扫描 MySQL 主备一致 主从切换 提升性能 kill 不掉 缩表空间 复制表 权限 恢复数据原创 2022-01-05 11:48:16 · 939 阅读 · 0 评论 -
MySQL 用户临时表
方法二 : 把各个分库拿到的数据,汇总到一个 MySQL 实例的一个表中,再进行逻辑处理。InnoDB 表创建 frm 文件保存表结构定义,还另存表数据。分库分表 : 把逻辑大表分散到不同的数据库实例上。frm 文件放在临时文件目录下,文件名前缀是。binlog 记录 : 对原来SQL 进行重写。主库上不同的线程创建同名的临时表,备库怎么处理。方法一 : proxy 层的排序。原创 2023-04-03 18:12:27 · 1151 阅读 · 1 评论 -
MySQL Join 优化
Block Nested-Loop Join 算法,可能会对被驱动表做多次扫描。当被驱动表是个大量冷数据表,可能导致 IO 压力大,还可能影响 Buffer Pool 的命中率。MySQL 5.6 后引入 Batched Key Access(BKA) 算法 : 对 NLJ 算法的优化。Multi-Range Read 优化 (MRR) : 尽量用顺序读盘。MRR思想 :对主键的递增顺序查询,更接近顺序读,就能提升读性能。执行时间 : 总和 < 1 秒。,减少对被驱动表的扫描次数。启动 BKA 优化算法。原创 2023-03-31 20:36:06 · 359 阅读 · 1 评论 -
MySQL 全表扫描
InnoDB 内存管理 : 最近最少使用 (Least Recently Used, LRU) 算法。WAL 里 Buffer Pool 配合 redo log,就避免了随机写盘 , 加速更新。原创 2023-03-30 20:52:50 · 1163 阅读 · 1 评论 -
MySQL group by
对 group by 的结果没有排序要求,就加 order by null尽量让 group by 用上表的索引,确认 explain 结果没有和当 group by 统计的数据量不大时,尽量用内存临时表;也可以适当调大,避免用到磁盘临时表当数据量实在太大,用提示,让优化器直接用排序算法。原创 2023-03-29 20:33:56 · 395 阅读 · 1 评论 -
MySQL order by
MySQL 的设计思想:当内存够,就多用内存,尽量减少磁盘访问。用于排序的行数据的长度阈值,当长度太大,就换算法。为避免全表扫描,要在。原创 2023-03-29 18:31:21 · 522 阅读 · 1 评论 -
MySQL count
`count(*)` 不同引擎的实现 :- MyISAM 引擎 : 把该表的总行数存在磁盘上,当执行 `count(*)` 时 , 会直接返回该数,效率很高 ( 带 where 就不会快了)- InnoDB 引擎 : 执行 `count(*)` 时,要把数据一行行从引擎里面读出来,并计数原创 2023-03-29 18:30:25 · 325 阅读 · 1 评论 -
MySQL 索引失效
字符集 utf8mb4 是 utf8 的超集。查所有年份中 7 月份的交易记录总数。MYSQL 内部改 SQL。改造 : 快速定位索引。原创 2023-03-28 22:35:50 · 225 阅读 · 2 评论 -
MySQL 等锁
停止 4 号线程当前正在执行的语句。MySQL 5.7 能通过。原创 2023-03-28 20:59:26 · 348 阅读 · 2 评论 -
MySQL InnoDB/Memory
join 优化例子 : 创建 InnoDB 临时表。Memory 表创建 B-Tree 索引。内存表不支持行锁,只支持表锁。原创 2023-03-28 19:53:07 · 511 阅读 · 1 评论 -
MySQL InnoDB 刷脏页
WAL 机制 : InnoDB 在处理更新语句时,只做写日志的磁盘操作。原创 2023-03-27 20:48:52 · 835 阅读 · 2 评论 -
MySQL 复制表
物理拷贝 : 速度最快。局限性 : 必须是全表拷贝;要在服务器上拷贝数据;源表和目标表都是 InnoDBmysqldump : 能 where 增加过滤条件,来实现只导出部分数据。缺点 : 不能用 join 较复杂的 where 写法: 最灵活,支持所有的SQL写法。缺点 : 每次只能导出一张表的数据,而且表结构也要另外备份。原创 2023-03-26 17:12:17 · 701 阅读 · 1 评论 -
MySQL 权限
创建用户 :该命令的内部操作 :用户在 user 表的状态 :全局权限 : 作用于整个 MySQL,这些权限信息保存在 mysql 库的 user 表中用户 ua 给最高权限 :命令的内部操作 :小结 :回收 grant 给的权限 :命令的内部操作 :ua 有库 db1 的所有权限 :该命令的内部操作 :用户 ua 在 db表的状态 :grant 对已连接 (全局权限 , 基于 db 的权限) 的影响区别 :MySQL 支持表权限和列权限 :表列权限的赋权 : 会清空 acl_users 数组原创 2023-03-26 15:56:24 · 520 阅读 · 0 评论 -
MySQL 各ID上限
各自增 ID 被用完了 ,会出现什么情况。原创 2023-03-24 22:32:11 · 738 阅读 · 1 评论 -
MySQL 分区表
InnoDB 的分区表加间隙锁 : MyISAM分区表的锁 : MySQL 第一次访问一个分区表时,会把所有的分区都访问一遍原创 2023-03-24 22:21:24 · 398 阅读 · 1 评论 -
MySQL 前缀索引
校验码可相同时,就用 id_card 精确判断。倒序存储 : 把身份证号倒过来存。原创 2023-03-23 21:38:37 · 843 阅读 · 2 评论 -
MySQL 选错索引
优化器选择索引的目的 : 找到最优的执行方案,并用最小的代价去执行语句。方法4 :与业务开发沟通,删除错误选择的索引,让优化器选择正确的索引。扫描行数是根据统计信息来估算记录数。原创 2023-03-23 20:47:03 · 710 阅读 · 2 评论 -
MySQL Join
用 NLJ 算法 : 用上被驱动表上的索引,就没有问题用 BNL 算法 : 扫描行数就会过多 , 会占用大量的系统资源。尽量避免该 Join用 NLJ 算法,就用小表做驱动表用 BNL 算法 :够大就一样 , 当不够大,就用小表做驱动表-- 该性能较高 , t2为小表, 又为驱动表 select * from t2 straight_join t1 on(t1 . b = t2 . b) where t2 . id原创 2023-03-23 18:41:19 · 304 阅读 · 1 评论 -
MySQL 普通/唯一索引
身份证号字段较大,一般创建唯一索引或 普通索引。原创 2023-03-14 21:49:26 · 332 阅读 · 2 评论 -
MySQL 索引优化
索引下推优化 (index condition pushdown) : 索引遍历时,对索引中包含的字段先判断,直接过滤掉不满足条件的记录,减少回表次数。应用场景 : 根据身份证号高频查询姓名,创建 (身份证号、姓名) 联合索引就有意义。只需要查 ID 的值,而 ID已在 k 索引树上,只要直接提供查询结果,不用回表。覆盖索引 : 减少树的搜索次数,并提升查询性能。B+ 树 : 能用索引的最左前缀,来定位记录。原创 2023-03-13 21:21:14 · 223 阅读 · 2 评论 -
MySQL 日志系统
MySQL 的 WAL 技术 (Write-Ahead Logging) : 先写日志,再写磁盘 - 更新记录 : InnoDB 先把记录写到 redo log,并更新内存,才是更新完成 , InnoDB 在空闲时,将该记录更新到磁盘中InnoDB 的 redo log 是固定大小 :原创 2023-03-13 18:20:09 · 315 阅读 · 2 评论 -
MySQL 索引
哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。索引下推优化 (index condition pushdown) : 在索引遍历时,对索引中包含的字段先判断,直接过滤掉不满足条件的记录,减少回表次数。只需要查 ID 的值,而 ID已在 k 索引树上,只要直接提供查询结果,不用回表。原创 2023-03-12 21:44:46 · 122 阅读 · 2 评论 -
MySQL 主备一致
binlog 记录真实删除行的主键 id,binlog 传到备库去,就肯定会删除 id=4 行,不会造成主备不一致问题。MySQL 会判断该 SQL 是否可能引发主备不一致,可能就用 row 格式,否则就用 statement 格式。statement : SQL 记录到 binlog ,仅占用几十个字节。该 SQL 用 statement 格式 : 炸一看会引发主备不一致。statement : binlog 记录的 SQL 原语句。生产环境依然用 row 格式 , 其原因 : 利于恢复数据。原创 2023-03-09 18:34:00 · 659 阅读 · 1 评论 -
MySQL 行锁
行锁 : 对表中行记录的锁两阶段锁协议 : 行锁是在需要时才加上,要等到事务结束才释放例子 : id 是表 t 的主键的事务中要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放例子 : 电影票交易。原创 2023-03-09 18:31:35 · 892 阅读 · 2 评论 -
MySQL 全局锁
锁的分类 : 全局锁、表级锁、行锁全局锁 : 对整个数据库实例加锁。原创 2023-03-09 18:32:24 · 161 阅读 · 2 评论 -
MySQL 表锁
表锁分类:表锁,元数据锁 (meta data lock , MDL)MDL (metadata lock) 的作用 : 保证读写的正确性。原创 2023-03-09 18:29:47 · 124 阅读 · 2 评论 -
MySQL 事务隔离
ACID : 原子(Atomicity)、一致(Consistency)、隔离(Isolation)、永久(Durability)将 1 改成 2。原创 2023-03-09 18:28:44 · 214 阅读 · 2 评论 -
MySQL 基础架构
mysql : 客户端工具,用来跟服务端建立连接。完成 TCP 握手后,连接器就进行认证身份,输入的用户名和密码。当长连接过多时,MySQL 占用内存会很大,这些资源会在连接断开时才释放,容易导致 MySQL 异常重启。执行器 : 开始执行语句 , 会先判断对该表 T 是否有执行查询的权限,当没有,就会返回没有权限的错误。优化器 : 在表中有多个索引时,决定用哪个索引;分析器 : 先进行 词法分析 : 识别 SQL 中字符串分别是什么,代表什么。连接建立完成后,执行 select 语句后,进行查询缓存。原创 2023-03-09 18:27:55 · 453 阅读 · 2 评论 -
mysql message from server: “Too many connections“ 错误现象 解决方案
错误现象 :Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishme原创 2021-04-21 22:33:31 · 5712 阅读 · 0 评论 -
windows上同时安装多个版本的mysql数据库
windows上同时安装多个版本的mysql数据库成功环境显示 :解决方案 :成功环境显示 :多个mysql位置多个mysql服务解决方案 :找到自己mysql安装的位置新创建一个 my.ini 文件[client]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 设置3306端口port = 3306########### 注意修改 ################### 设置mysql的安装目录base原创 2021-04-13 20:29:22 · 265 阅读 · 0 评论 -
Power Designer的介绍安装与使用 创建数据模型PDM
Power DesignerPower Designer介绍安装 Power DesignerPower Designer使用创建物理数据模型创建数据模型PDM选择数据库类型创建表和字段指定表名创建字段创建另表和字段添加外键约束从PDM导出SQL脚本逆向工程生成数据库报表文件Power Designer介绍PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用 PowerDesigner 可以制作数据流程图、概念数据模型、物理原创 2021-03-24 21:08:25 · 725 阅读 · 1 评论 -
druid的错误 Cannot resolve com.mysq.jdbc.Connection.ping method. init datasource error validateConnecti
警告: Cannot resolve com.mysq.jdbc.Connection.ping method. Will use ‘SELECT 1’ instead.java.lang.NullPointerExceptioncom.alibaba.druid.pool.DruidDataSource error严重: init datasource errorjava.sql.SQLException: validateConnection false下面是错误现象修改druid..原创 2020-12-17 11:59:14 · 807 阅读 · 0 评论 -
MySql数据库时区异常 The server time zone value 字符乱码 版本问题query_cache_size
错误bug :Exception in thread “main” java.sql.SQLException: Unknown system variable ‘query_cache_size’我使用 mysql-connector-java-5.1.37 发现无法使用, 是因为版本太低, 所以要下载高版本高版本链接 : https://dev.mysql.com/downloads/connector/j/错误bug :The server time zone value ‘�й原创 2020-12-14 13:43:35 · 425 阅读 · 0 评论 -
MySQL 配置, 避坑 sqlyog连接mysql错误码2058
MySQL 配置, 避坑当然第一步就是要下载mysql 啦mysql的官方下载地址 , 无法保证这个链接一直有效, 建议你自己google 一下 mysql 下载:https://dev.mysql.com/downloads/mysql/下载完毕, 就解压到一个目录下, 我就是解压到 D盘然后在这个目录下,新创建一个 my.ini 文件[client]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 设置3306端口.原创 2020-09-23 18:49:31 · 1003 阅读 · 0 评论