
mysql
文章平均质量分 55
小甄笔记
这个作者很懒,什么都没留下…
展开
-
数据库四大特性的实现原理
指维护一个数据的多个版本,使得读写操作没有冲突MVCC的具体实现,主要依赖于数据库记录中的。回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和 MVCC(多版本并发控制)。当update一条记录时,它记录一条对应相反的update记录。当执行roback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。可以认为当delete一条记录时,undolog中会记录一条对应的insert记录,反之亦然。主要依赖于unlog,undo log保证了事务的原子性和一致性。原创 2024-03-18 15:55:04 · 411 阅读 · 0 评论 -
Mysql关于同时使用Group by 和Order by问题
SELECT * FROM (SELECT * FROM reward ORDER BY money desc limit 10000000000000)r GROUP BY r.uid // 但是此写法性能可能有问题。结果不符合预期:发现“mysql 5.7 中order by 和GROUP BY 一起使用 order by 不生效”,必须加上limit限制 ,避免系统会把order by优化掉。(第二次尝试)构建sql语句。原创 2024-03-14 14:17:41 · 2403 阅读 · 0 评论 -
mysql设计过程中要考虑哪些要素
4、选择合适的字段类型和字段长度。原创 2024-03-14 11:35:09 · 486 阅读 · 0 评论 -
为什么要用B+树
在节点分裂和合并时,IO操作少:B+树的叶子节点的大小是固定的,而且节点的大小一般都会设置为一页的大小,这就使得节点分裂和合并时,IO操作很少,只需读取和写入一页。支持范围查询:B+树在进行范围查询时,只需要从根节点一直遍历到叶子节点,因为数据都存储在叶子节点上,而且叶子节点之间有指针连接,可以很方便的进行范围查询。有利于缓存:B+树的非叶子结点只存储执行子节点的指针,二步存储数据,这样可以使得缓存能搞容纳更多的索引数据,从而提供缓存的命中率,加快查询速度。节点大小固定,可以存储更多的索引数据。原创 2024-01-14 15:30:46 · 1062 阅读 · 0 评论 -
MySQL的多版本并发控制(MVCC)
在InnoDB中,MVCC就是通过Read View + Undo Log来实现的,undo log中保存了历史快照,r而Read View用来判断具体哪一个快照是可见的。原创 2024-01-14 13:42:34 · 1090 阅读 · 0 评论 -
数据库的连接池有哪些
Apache Commons DBCP:Apache Commons DBCP是一个流行的开源数据库连接池,它提供了一组可配置的参数来管理连接池的大小、最大活动连接数、最大空闲连接数等。Tomcat JDBC Pool:Tomcat JDBC Pool是Apache Tomcat服务器的官方数据库连接池,它提供了高性能和可靠性,并且与Tomcat服务器紧密集成。C3P0:C3P0是另一个常用的Java数据库连接池,它支持连接池的自动管理和连接的重用。它还支持连接池的动态调整和连接的自动回收。原创 2024-01-12 08:31:00 · 965 阅读 · 0 评论 -
mysql索引失效场景与mysql优化方式
缓冲池大小是Innodb存储引擎的核心参数之一,它控制着Innodb存储引擎的内存大小,可以将该参数设置为系统可用内存的70%-80%,在选择要创建的索引时,请考虑查询频率和查询性能。:尽可能使用简单的查询语句,并确保使用索引来过滤数据,以减少查询时间。:优化数据库设计可以提高查询性能和数据完整性,如使用正规化的表设计。:定期清理不需要的数据和记录可以减少数据库的负载,并提高查询性能。:对于经常访问的查询结果,可以考虑使用缓存技术,如 redis。:将表分为较小的分区可以提高查询性能,并减少查询时间。原创 2024-01-11 20:12:27 · 978 阅读 · 0 评论 -
聚簇索引与非聚簇索引
聚集索引的数据文件只有数据结构文件.frm和数据文件.idb,其中.idb中存放的是数据和索引信息,是存放在一起的。非聚集索引的叶节点存储的是索引值和指向对应数据行的指针,而非叶子节点存储的是索引值和指向下一级节点的指针。叶子节点用指针连接起来,叶子节点包含全部索引值,而非叶子节点的索引值只是叶子节点的冗余。聚簇索引和非聚簇索引是数据库中常用的两种索引类型,它们的区别在于索引的顺序是否与数据的物理存储顺序一致。因此,索引的叶子节点和非叶子节点存储的内容是不同的,具体存储的内容也与索引的类型有关。原创 2023-12-07 11:07:23 · 523 阅读 · 0 评论 -
MySQL用得好好的,为何要转ES?
MySQL是一种关系型数据库,它可以高效地存储和查询结构化的数据。ES是一种分布式搜索引擎,它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。MySQL和ES的应用场景和优势各不相同,因此在选择使用哪种技术时,需要根据具体的业务需求和数据特点进行权衡。一般来说,如果数据主要是结构化的,且需要保证事务性、一致性和完整性,那么MySQL可能是更合适的选择。如果数据主要是非结构化或半结构化的,且需要支持复杂的搜索、聚合和分析功能,那么ES可能是更合适的选择。原创 2023-11-28 13:05:41 · 916 阅读 · 0 评论 -
Mysql的二阶段提交
总的来说,在崩溃恢复后,只要redo log不是处于commit阶段,那么就拿着redo log中的XID去binlog中寻找,找得到就提交,否则就回滚。可以看到,InnoDB在写redo log时,并不是一次性写完的,而有两个阶段,Prepare与Commit阶段,这就是"两阶段提交"的含义。如果在写入binlog后立马崩溃,在恢复时,由redo log中的XID可以找到对应的binlog,这个时候直接提交即可。首先比较重要的一点是,在写入redo log时,会顺便记录XID,即当前事务id。原创 2023-11-28 12:19:53 · 1054 阅读 · 0 评论 -
Canal常见面试题
Canal还支持多种数据输出器,如Kafka、RocketMQ、ActiveMQ等,可以将解桥出来的数据发送到不同的消息队列中,以便进行进一步的处理和分析。Canal是阿里巴巴开源的一款基于Netty实现的分布式、高性能、可靠的消息队列,在实时数据同步和数据分发场景下有着广泛的应用。如果您使用的是基于数据库的Canal存储模式,Canal还会自动更新元数据信息。Canal主要用于实时数据同步和数据分发场景,常见的应用场景包括:数据备份与灾备、增量数据抽取和同步、数据实时分析、在线数据迁移等。原创 2023-11-10 10:27:42 · 656 阅读 · 0 评论 -
使用shardingJDBC中的雪花算法生成id
使用sharding-jdbc中的使用IP后几位来做workId,但在某些情况下会出现生成重复ID的情况。分布式部署就需要分配不同的workId, 如果workId相同,可能会导致⽣成的id相同。分布式情况下,需要保证各个系统时间⼀致,如果服务器的时钟回拨,就会导致⽣成的 id 重复。方式二:使用Sharding-Jdbc配置文件,注释DO类里面的id分配策略。生成的 id 中包含有时间戳,所以生成的 id按照时间递增。部署了多台服务器,需要保证系统时间⼀样,机器编号不⼀样。原创 2023-11-02 18:49:07 · 1384 阅读 · 0 评论 -
MyBatis 批量插入foreach性能问题
批量插入原创 2022-08-26 16:33:22 · 1491 阅读 · 0 评论 -
MySQL加索引语句不加锁:ALGORITHM=INPLACE, LOCK=NONE
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;ALGORITHM=INPLACE更优秀的解决方案,在当前表加索引,步骤:1.创建索引(二级索引)数据字典2.加共享表锁,禁止DML,允许查询3.读取聚簇索引,构造新的索引项,排序并插入新索引4.等待打开当前表的所有只读事务提交5.创建索引结束ALGORITHM=COPY通过临时表创建索引,需要多一倍存储,还有更多的IO,步骤:..原创 2021-10-22 10:56:13 · 2438 阅读 · 0 评论 -
Union和Union All到底有什么区别
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNIONUnion All:对两个结果集进行并集操作,包括重复行,不进行排序;如果返回的两个结果原创 2021-03-11 15:01:30 · 1512 阅读 · 0 评论 -
mysql不遵循最左前缀的场景
如果select a,b from table where b =1 and a=2 ;且a,b都是索引,因为ab,都是索引,所以不会产生回表查询,无论顺序如何都会走索引但是一旦产生了回表查询,必须遵循最左前缀法则原创 2021-01-25 22:38:23 · 240 阅读 · 0 评论 -
数据库生产问题排查
故障描述在7月24日11点线上某数据库突然收到大量告警,慢查询数超标,并且引发了连接数暴增,导致数据库响应缓慢,影响业务。看图表慢查询在高峰达到了每分钟14w次,在平时正常情况下慢查询数仅在两位数以下赶紧查看慢SQL记录,发现都是同一类语句导致的慢查询(隐私数据例如表名,我已经隐去):select *from sample_tablewhere 1 = 1 and (city_id = 565) and (type = 13)order by id d原创 2021-01-25 22:32:51 · 291 阅读 · 0 评论 -
B树和B+树的区别
B树另一个名字就是二叉树索引。1.每个节点的儿子节点都是两个,左边是比该节点小的,右边是比该节点大的,这两个索引的儿子节点同样是这种情况2.所有的节点都是一个关键字搜索的时候是从根节点开始搜索的。比如搜索的是35,则直接命中。如果搜索“28“,那就是比35小,左边节点,“17”,“28”比“17”大,则右边节点,直到命中B+树我们把所有的数据进行折半块查找,比如一共100条数据。在30和60的地方分一下,存放30和60的节点就是根节点。30和60就是该节点的关键字,100也就是原创 2021-01-21 00:30:25 · 249 阅读 · 0 评论 -
mysql的执行引擎
原创 2021-01-05 14:12:30 · 216 阅读 · 0 评论 -
sql语句语法
手写顺序执行顺序join语句内连接:A、B表中共有的左连接:A表中所有的右连接:B表中所有的 左连接+条件:A中有B中没有的 右连接+条件 :B中有A中没有的 全连接:A、B表中所有数据 全不连接:A、B表中各自独有的sql语句#试题一、找出平均成绩大于60的所有学生的学号(即student_id)、姓名和平均分数 SELECT a.`name`,a.student_id,AVG(b.原创 2020-12-21 16:12:37 · 136 阅读 · 1 评论 -
OGG
Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。Oracle Golden Gate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。同时,Oracle Golden Ga原创 2020-11-17 14:44:20 · 102 阅读 · 0 评论 -
mysql数据库锁机制
首先对mysql锁进行划分:按照锁的粒度划分:行锁、表锁、页锁按照锁的使用方式划分:共享锁、排它锁(悲观锁的一种实现)还有两种思想上的锁:悲观锁、乐观锁行锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。有可能会出现死锁的情况。 行级锁按照使用方式分为共享锁和排他锁共享锁用法(S锁 读锁): 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不原创 2020-10-19 22:43:43 · 805 阅读 · 0 评论 -
mysql数据库事务
mysql事务的四大特性原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失事务的启动和提交方式在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后原创 2020-10-13 22:21:37 · 506 阅读 · 1 评论 -
mysql索引优化
mysql常见的瓶颈cpu:CPU饱和一般发生在数据装入内存或从磁盘上读取数据的时候IO:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候ExplainMysql中有专门负责优化SELECT语句的优化器模块,使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈,具体包含:表的读取速度,数据读取操作的操作类型,哪些索引可以被使用,哪些索引被实际使用,表之间的引用,每张表有多少行被优化器查询id:在一原创 2020-10-12 21:02:24 · 841 阅读 · 0 评论 -
mysql索引
索引概述索引(index)是帮助mysql高效获取数据的数据结构(有序),在数据之外,数据库还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高效查找算法,这种数据结构就是索引没有索引的sql语句,会进行全表扫描,从上到下依次查询,直到找到符合条件的数据,效率是非常低的一般来说索引本身也很大,不可能全部存储咋内存中国你,因此索引往往以索引文件的形式存储在磁盘上,索引是数据库中用来提高性能最常用的工具索引的优缺点优势:类似于书原创 2020-09-30 13:59:03 · 290 阅读 · 0 评论 -
数据库的主从复制/读写分离
数据库主从复制原理:主服务器的增删改成sql会记录到a-bin.log文件中,从服务器拿到这个文件,执行文件中相应的sql语句读写分离必须基于主从复制才能实现:mycat作用:接管多个数据库,对数据库进行心跳检测,当主服务器故障后,自动实现主从切换...原创 2020-04-23 13:12:54 · 277 阅读 · 0 评论