数据库
文章平均质量分 90
暗夜猎手-大魔王
热爱运动,喜欢跑步
展开
-
数据库拆分5--使用sharding-jdbc来实现水平拆分
使用sharding-jdbc来实现水平拆分原创 2022-12-18 18:41:15 · 860 阅读 · 1 评论 -
数据库拆分4--sharding-jdbc-spring-boot-starter自动装配启动过程
sharding-jdbc-spring-boot-starter自动装配启动过程原创 2022-12-18 16:09:27 · 1792 阅读 · 0 评论 -
数据库拆分3--使用sharding-jdbc 支持子查询sql
使用sharding-jdbc 子查询注意事项 升级到4.1.1支持子查询原创 2022-12-15 21:56:25 · 5836 阅读 · 3 评论 -
数据库拆分2--使用sharding-jdbc实现垂直拆分
使用sharding-jdbc实现垂直拆分原创 2022-12-11 17:47:08 · 1029 阅读 · 0 评论 -
数据库拆分1--使用dynamic-datasource实现垂直拆分
数据源垂直拆分 dynamic-datasource原创 2022-12-11 16:33:18 · 1046 阅读 · 0 评论 -
Mysql Information Schema 学习(二)--Innodb表
Mysql Information Schema 学习(二)--Innodb表原创 2022-07-03 17:00:27 · 403 阅读 · 0 评论 -
Mysql Information Schema 学习(一)--通用表
Mysql information Schema 学习(一)--通用表原创 2022-07-03 16:27:15 · 1195 阅读 · 0 评论 -
mysql分区表学习
学习地址:MySQL :: MySQL 5.7 Reference Manual :: 22 Partitioning分区简介查看当前数据库是否支持分区SELECT PLUGIN_NAME AS NAME, PLUGIN_VERSION AS Version, PLUGIN_STATUS AS STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_TYPE = 'STORAGE ENGINE';分区优势: 分区.原创 2022-05-04 10:53:49 · 311 阅读 · 0 评论 -
Mysql Innodb在线DDL原理
Mysql Innodb在线DDL原理昨晚在生产环境执行DDL时,数据库发现出现大量锁等待,数据库链接一直释放不了,CPU升高,数据库差一点宕机,业务应用基本不可用,吓尿。Waiting for table metadata lock下面,结合mysql官方文档,仔细研究一下mysql的在线ddl功能。MySQL :: MySQL 5.7 Reference Manual :: 14.13 InnoDB and Online DDLmysql支持在线ddl其实是innodb.原创 2022-04-02 19:10:37 · 2791 阅读 · 1 评论 -
PostgreSQL JOIN实践及原理
PostgreSQL JOIN实践及原理最近项目使用了PostgreSQL 简单学习join语法以及原理,以后有时间搞一下SQLite源码。PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。在 PostgreSQL 中,JOIN 有五种连接类型:...原创 2020-04-19 09:57:38 · 3053 阅读 · 0 评论 -
MySQL实战45讲学习笔记----分区表
分区表分区表的组织形式,创建一个表t:CREATE TABLE `t` ( `ftime` datetime NOT NULL, `c` int(11) DEFAULT NULL, KEY (`ftime`)) ENGINE=InnoDB DEFAULT CHARSET=latin1PARTITION BY RANGE (YEAR(ftime))(PARTITION p...原创 2020-02-18 16:00:44 · 275 阅读 · 0 评论 -
MySQL实战45讲学习笔记----grant权限控制
介绍grant语句和flush privileges语句原理创建一个用户:create user 'ua'@'%' identified by 'pa';这条语句的逻辑是创建一个用户’ua’@’%’,密码是pa。注意,在MySQL里面,用户名(user)+地址(host)才表示一个用户,因此 ua@ip1 和 ua@ip2代表的是两个不同的用户。这条命令做了两个动作: 磁...原创 2020-02-18 15:38:40 · 435 阅读 · 0 评论 -
MySQL实战45讲学习笔记----复制表
复制表的方法,将数据从一张表复制到另一张表创建一个表db1.t,并插入1000行数据,同时创建一个相同结构的表db2.tcreate database db1;use db1;create table t(id int primary key, a int, b int, index(a))engine=innodb;delimiter ;; create procedure...原创 2020-02-17 11:40:48 · 201 阅读 · 0 评论 -
MySQL实战45讲学习笔记----insert语句锁
insert语句的锁有 自增锁 行锁 间隙锁MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。insert … select 语句表t和t2的表结构、初始化数据语句如下CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d`...原创 2020-02-17 11:11:40 · 370 阅读 · 0 评论 -
MySQL实战45讲学习笔记----自增主键不连续分析
自增主键不能保证连续递增,什么情况下自增主键会出现 “空洞”?创建一个表t,其中id是自增主键字段、c是唯一索引。CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), ...原创 2020-02-16 09:44:15 · 238 阅读 · 0 评论 -
MySQL实战45讲学习笔记----内存表
内存表的数据组织结构假设有以下的两张表t1 和 t2,其中表t1使用Memory 引擎, 表t2使用InnoDB引擎。create table t1(id int primary key, c int) engine=Memory;create table t2(id int primary key, c int) engine=innodb;insert into t1 value...原创 2020-02-16 09:35:31 · 275 阅读 · 0 评论 -
MySQL实战45讲学习笔记----group by原理
group by 执行流程select id%10 as m, count(*) as c from t1 group by m;这个语句的逻辑是把表t1里的数据,按照 id%10 进行分组统计,并按照m的结果排序后输出。它的explain结果如下:图4 group by 的explain结果在Extra字段里面,我们可以看到三个信息:Using index,表示这个语...原创 2020-02-14 09:53:45 · 791 阅读 · 0 评论 -
MySQL实战45讲学习笔记----临时表
join查询的时候如果连接字段没有建索引,可以通过创建临时表,给临时表添加索引来优化join语句执行create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * ...原创 2020-02-13 11:12:31 · 841 阅读 · 0 评论 -
MySQL实战45讲学习笔记----join原理与优化
join语句执行原理NLJ,SNL,BNL,BKA算法创建两个表t1和t2,存储过程idata()往表t2里插入了1000行数据,在表t1里插入的是100行数据。CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY K...原创 2020-02-09 09:43:01 · 908 阅读 · 0 评论 -
MySQL实战45讲学习笔记----查询结果返回过程分析
全表扫描时,客户端查询服务端数据库中大量数据,查询结果是如何返回给客户端的。全表扫描对server层的影响mysql -h$host -P$port -u$user -p$pwd -e "select * from db1.t" > $target_fileInnoDB的数据是保存在主键索引上的,所以全表扫描实际上是直接扫描表t的主键索引。这条查询语句由于没有其他的判断条件,...原创 2020-02-08 10:04:32 · 1537 阅读 · 0 评论 -
MySQL实战45讲学习笔记----误删数据
与MySQL相关的误删数据分类如下: 使用delete语句误删数据行; 使用drop table或者truncate table语句误删数据表; 使用drop database语句误删数据库; 使用rm命令误删整个MySQL实例 误删行如果是使用delete语句误删了数据行,可以用Flashback工具通过闪回把数据恢复回来。Flashback恢复数...原创 2020-02-08 09:41:22 · 314 阅读 · 0 评论 -
MySQL实战45讲学习笔记----读写分离主备延迟
一主多从主要应用与读写分离,一般情况下写主库,从多个从库读数据,主库与从库之间进行数据同步,但是由于主从同步之间有延时,这样在主库写完数据,从从库查询数据可能会出现过期读问题。读写分离的基本结构客户端直连 图1 读写分离基本结构读写分离的主要目标就是分摊主库的压力。图1中的结构是客户端(client...原创 2020-02-07 09:06:15 · 393 阅读 · 0 评论 -
MySQL实战45讲学习笔记----一主多从主备切换问题
在一主多从架构下,主库故障后的主备切换问题 图1 一主多从基本结构 图2主库发生故障,主备切换后的结果图中,虚线箭头表示的是主备关系,也就是A和A’互为主备, 从库B、C、D指向...原创 2020-02-06 09:43:01 · 843 阅读 · 1 评论 -
MySQL实战45讲学习笔记----备库并行复制
主备延迟的原因有备库机器性能差 、备库压力大以及大事务的影响,同时还有备库的并行复制能力的影响,偶发性的查询压力对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来。但是,如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别。而且对于一个压力持续比较高的主库来说,备库很可能永远都追不上主库的节奏。备库并行复制机制主备同步过程 ...原创 2020-02-06 09:12:58 · 306 阅读 · 0 评论 -
MySQL实战45讲学习笔记----主备切换
MYSQL高可用原理 主备切换的过程以及问题解决总结。在一个主备关系中,每个备库接收主库的binlog并执行。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有最终一致性是不够的。主要介绍主备延迟的原因、解决策略以及主备切换时机的判断。双M结构的主备切换流程图 ...原创 2020-02-05 09:44:19 · 3154 阅读 · 0 评论 -
MySQL实战45讲学习笔记----主从同步
binlog可以用来归档,也可以用来做主备同步,MYSQL几乎所有的高可用架构,都直接依赖于binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。MySQL主备的基本原理如图1所示就是基本的主备切换流程。 图 1 MySQL主备切换流程在状态1中,客户端的读写都直接...原创 2020-02-05 09:18:00 · 245 阅读 · 0 评论 -
MySQL实战45讲学习笔记----binlog和redo log写入机制
只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。binlog的写入机制事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。一个事务的binlog是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到了binlog cache的保存问题。系统给binlo...原创 2020-02-04 12:01:56 · 976 阅读 · 1 评论 -
MySQL实战45讲学习笔记----性能优化2
业务高峰期,生产环境的MySQL压力太大,没法正常响应,需要短期内、临时性地提升一些性能。短连接风暴正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重连。如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的情况。MySQL建立连接的过程,成本是很高的。除了正常的网络连接三次握手外,还需要做登录权限判断和获得这个连接的数据读写权限。在数据库压力比...原创 2020-02-04 11:29:28 · 243 阅读 · 0 评论 -
MySQL实战45讲学习笔记----加锁规则
参考资料:MySQL实战45讲--林晓斌 https://www.cnblogs.com/wangjiming/p/10410904.html学习一下InnnoDB在可重复读隔离级别下的加锁规则,基于mysql版本 5.x系列<=5.7.24,8.0系列 <=8.0.13可重复读隔离级别下加锁规则next-key lock = 间隙锁 + 行锁 原则1:加锁的基...原创 2020-02-03 10:28:27 · 584 阅读 · 1 评论 -
MySQL实战45讲学习笔记----幻读
幻读 在可重复读级别下,指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。InnoDB是用行锁和间隙锁来解决幻读问题的。建表和初始化语句如下CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PR...原创 2020-02-03 09:53:56 · 213 阅读 · 0 评论 -
MySQL实战45讲学习笔记----查询性能优化1
分享一些由于锁等待而导致查询性能慢的情况 MDL锁 flush 行锁 一致性读构造一个表,有两个字段id和c,在里面插入了10万行记录。mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;...原创 2020-02-01 09:41:47 · 326 阅读 · 0 评论 -
MySQL实战45讲学习笔记----索引2
对索引字段做函数操作,可能会破坏索引值的有序性,优化器放弃索引搜索功能。总结一些由于直接或者间接对于索引字段函数操作而导致索引失效的情况条件字段函数操作一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。表的建表语句如下:mysql> CREATE TABLE `tradelo...原创 2020-02-01 09:29:05 · 326 阅读 · 0 评论 -
MySQL实战45讲学习笔记----随机消息
有一个随机显示单词的功能,每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。表的建表语句和初始数据的命令如下:mysql> CREATE TABLE `words` ( `id` int(11) NOT NULL AUTO_INCREMENT, `word` varc...原创 2020-01-31 08:43:51 · 329 阅读 · 1 评论 -
MySQL实战45讲学习笔记----orderby原理
以市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NUL...原创 2020-01-31 08:20:27 · 308 阅读 · 0 评论 -
MySQL实战45讲学习笔记----count函数
计算一个表的行数,select count(*) from t ,但是随着系统中记录数越来越多,这条语句执行得也会越来越慢。count(*)的实现方式在不同的MySQL引擎中,count(*)有不同的实现方式。MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高; 而InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一...原创 2020-01-30 09:42:40 · 393 阅读 · 0 评论 -
MySQL实战45讲学习笔记----表空间回收
数据库占用空间太大,把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,主要讨论表数据。参数innodb_file_per_table表数据既可以存在共享表空间里,...原创 2020-01-30 08:56:01 · 264 阅读 · 0 评论 -
MySQL实战45讲学习笔记----内存刷新flush机制
平时的工作中,不知道你有没有遇到过这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。WAL机制:InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作redo log(重做日志)。把内存里的数据写入磁盘的过程,术语就是flush。当内存数据页跟磁盘数据页内容不一致的时候,...原创 2020-01-29 10:33:51 · 1045 阅读 · 1 评论 -
MySQL实战45讲学习笔记----锁
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTW...原创 2020-01-22 14:38:17 · 230 阅读 · 0 评论 -
MySQL实战45讲学习笔记----索引
目录索引模型InnoDB 索引模型索引查询过程覆盖索引最左前缀原则索引下推索引选择查询过程更新过程change buffer的使用场景change buffer 和 redo logMYSQL索引优化选择优化器的逻辑索引选择异常和处理字符串字段索引前缀索引对覆盖索引的影响其他方式索引的出现其实就是为了提高数据查询的效...原创 2020-01-22 09:36:44 · 299 阅读 · 0 评论 -
MySQL实战45讲学习笔记----事务隔离
事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。隔离性ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom r...原创 2020-01-21 16:28:57 · 175 阅读 · 0 评论