随笔分类 -  数据库

摘要:《MySQL是怎样运行的》一书十一、十二章的相关笔记。掺入了一些自己的理解。 连接基础 MySQL中的连接使用嵌套子循环实现,其中有两个角色: 驱动表:子循环中处于外层的表 被驱动表:子循环中处于内层的表 而一个连接可以看作是对于驱动表中的每一条满足条件的记录,都对被驱动表使用连接属性进行一次查询, 阅读全文
posted @ 2023-02-09 15:57 yudoge 阅读(40) 评论(0) 推荐(0) 编辑
摘要:InnoDB以页来管理磁盘文件,根据页的功能不同,有多种多样不同的页,比如用来记录undolog信息的undo页,用于存放数据的数据页。现在我们主要来了解下数据页的结构。 实际上,InnoDB采用索引组织表的表结构,所以实际上无论是表,还是在表上建立的索引,都是以索引形式存在的。所以InnoDB实际 阅读全文
posted @ 2023-02-07 15:14 yudoge 阅读(61) 评论(0) 推荐(0) 编辑
摘要:和MVCC相关的三个东西 隐藏字段:InnoDB表中的每个行前都有的三个隐藏字段,用于实现MVCC机制 undolog:用于记录数据的历史版本,每一个数据的历史版本在undolog中构成一个历史版本链 readview*:每个事务都有一个,用于确定它能读到链中的哪些历史版本 隐藏字段 通过这一小节, 阅读全文
posted @ 2022-09-26 18:19 yudoge 阅读(656) 评论(0) 推荐(1) 编辑
摘要:架构 连接池:维护与客户端的连接的池子,达到线程重用 SQL层:包括解析器、优化器、缓存 存储引擎:MySQL的存储引擎掌管着表、索引等如何被实际存储,它们是插件式的 文件系统:保存MySQL服务器和存储引擎产生的文件 MyISAM和InnoDB InnoDB 支持ACID,行级锁,适合OLTP应用 阅读全文
posted @ 2022-08-11 11:17 yudoge 阅读(39) 评论(0) 推荐(0) 编辑
摘要:RedisTemplate中的几个角色: RedisSerializer:由于与Redis服务器的通信一定是使用字节数组完成的,所以RedisSerializer是将Java对象编码解码的组件 RedisOperations:封装了一些Redis操作 XXXOperations:封装了指定类型或功能 阅读全文
posted @ 2022-08-04 20:11 yudoge 阅读(268) 评论(0) 推荐(0) 编辑
摘要:初始表结构 CREATE TABLE t1( a INT UNIQUE ); CREATE TABLE t2( a INT UNIQUE ); INSERT INTO t1 SELECT 1; INSERT INTO t1 SELECT 2; INSERT INTO t1 SELECT 3; INS 阅读全文
posted @ 2022-07-10 15:30 yudoge 阅读(179) 评论(0) 推荐(0) 编辑
摘要:慢查询基础:优化数据访问 查询性能低下的基本原因就是:访问的数据太多了。这并不是单单指你的SQL语句最终需要获取的行数太多了,一个坏的数据库设计可能在你需要访问10行数据时扫描上万行数据。所以你需要从两方面考虑: 确认应用程序是否正在检索大量超过需要的数据 确认MySQL服务器层是否在分析大量超过需 阅读全文
posted @ 2022-07-02 10:45 yudoge 阅读(386) 评论(0) 推荐(0) 编辑
摘要:EXPLAIN可能返回多行,每一行揭示了在一个关联查询中,MySQL读取的一个表的细节。所以单表查询可以看成一个只有一个表的关联查询,EXPLAIN只返回一行。 本篇虽然参考了MySQL的官方文档,但官方文档中给的细节太少了,所以有很多我根据测试所意淫出来的理论,我不敢保证这些理论的正确性,我也找不 阅读全文
posted @ 2022-07-01 16:32 yudoge 阅读(267) 评论(0) 推荐(0) 编辑
摘要:什么是ICP(Index Condition Pushdown) 考虑下面的查询: SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%'; 假 阅读全文
posted @ 2022-07-01 10:49 yudoge 阅读(230) 评论(0) 推荐(0) 编辑
摘要:数据结构 由于C语言内置的数据结构匮乏,Redis实现了一些自己的数据结构。 我们需要分清数据结构和Redis数据类型的区别: 数据结构就只是按照某种结构组织起来的数据,Redis会在很多地方复用它 Redis数据类型指的是面向Redis用户提供的类型,即:string、hash、zset、list 阅读全文
posted @ 2022-06-28 14:49 yudoge 阅读(76) 评论(0) 推荐(0) 编辑
摘要:简单锁 使用multi、exec、watch的组合在高负载情况下经常会陷入重试之中,这限制了这种锁的可扩展性。下图给出了在不同负载情况下锁的平均等待时间,因为在高负载的情况下系统经常陷入到重试中,所以平均等待时间会变得非常大。 下面我们实现一种简单的互斥锁来降低系统中的重试次数,当获取锁失败时,操作 阅读全文
posted @ 2022-04-25 15:53 yudoge 阅读(83) 评论(0) 推荐(0) 编辑
摘要:持久化选项 Redis是一个内存数据库,但为了避免数据丢失,也提供了两种将数据持久化到磁盘的方式:快照方式和AOF方式(只追加文件)。这两种方式各有各的好处,主要看应用场景,而且它俩并不是非此即彼的,它们可以共同使用。 快照持久化 快照持久化保存redis内存数据在某一时刻的副本,可以通过BGSAV 阅读全文
posted @ 2022-04-22 15:38 yudoge 阅读(91) 评论(0) 推荐(0) 编辑
摘要:数据结构篇 Redis有五种基本的数据结构,可能是由于操作它们的指令太多,所以第一次见到Redis时就被它这几种数据类型搞蒙了,常常把它们搞混,不知道哪个是哪个,哪个提供什么功能。 这里,我们把Redis的数据结构分成三类来学习,希望能起到对Redis数据类型的理解和运用的帮助。 源头:字符串 字符 阅读全文
posted @ 2022-04-18 15:42 yudoge 阅读(65) 评论(0) 推荐(0) 编辑
摘要:注意,本篇内容针对MySQL,并且使用InnoDB存储引擎,其他存储引擎对于唯一索引空值的行为不在讨论范围内。 没注意过这个问题 唯一索引可以允许多个空值,并且你查询空值时还能用上索引?? 下面分析下它咋存的 我查看了下这个索引页的数据 把infimum和supremum之间的数据格式化一下,就是索 阅读全文
posted @ 2021-12-10 10:47 yudoge 阅读(305) 评论(0) 推荐(0) 编辑
摘要:事务是数据库中一个操作的最基本的单元,具有ACID特性。 原子性(A),事务是不可分割的,其中的操作要么都做了,要么都没做,不可能做一半。 一致性(C),事务在完成前数据库处于一致状态,完成后也要处于一致状态,事务不能打破数据库的一致性。 隔离性(I),事务看起来是被隔离的,即事务在提交之前,它对数 阅读全文
posted @ 2021-12-09 10:43 yudoge 阅读(106) 评论(0) 推荐(0) 编辑
摘要:latch和lock 我们讨论数据库理论中的锁,实际上大部分时间是在讨论lock。lock的对象是事务,用来加锁的对象是数据库、表、页、行等。 除了这些之外,数据库还需要对其自身的线程和内存中的数据结构进行并发控制,比如访问、刷新缓存列表中的页等,用来保证这些操作的并发正确性的工具就是latch。l 阅读全文
posted @ 2021-12-01 21:42 yudoge 阅读(101) 评论(0) 推荐(0) 编辑
摘要:InnoDB支持以下索引 B+树索引 散列索引 全文索引 其中,散列索引是由InnoDB自动创建的自适应哈希索引,人工无法干预。 我们最常见到的,也是大部分数据库系统都在用的索引类型就是B+树索引。 索引并不是越多越好,想要提升查询性能就要在更新性能上做一定的让步,我们需要在这两种性能之间寻找一个平 阅读全文
posted @ 2021-11-27 14:54 yudoge 阅读(104) 评论(0) 推荐(0) 编辑
摘要:索引组织表 InnoDB使用主键聚合索引,意思就是MySQL中的表是按照主键顺序在磁盘文件中存储的。 如果表没有主键: 判断表中有没有唯一非空索引,有则选中唯一非空索引中的第一个被定义的那个列来做聚合索引 如果条件1没有选出一个主键,那么自动创建一个6字节大小的指针来做聚合索引 关于隐藏列_rowi 阅读全文
posted @ 2021-11-24 16:40 yudoge 阅读(286) 评论(0) 推荐(0) 编辑
摘要:参数文件 my.cnf文件。 mysql --help | grep my.cnf命令显示了读取的顺序 参数类型 SHOW VARIABLES查看所有参数,一直到我这个版本一共有610个参数 参数分为运行期可以改变的动态参数和运行期不能改变的静态参数。通过SET可以设置这些参数。 @@global设 阅读全文
posted @ 2021-11-23 10:23 yudoge 阅读(90) 评论(0) 推荐(0) 编辑
摘要:MySQL体系结构和存储引擎 数据库和数据库实例 数据库:一组用于保存数据的物理操作系统文件或其他形式文件类型的集合。 实例:用于操作数据库文件。 如上命令显示/var/lib/mysql/就是我的MySQL数据库实例用来保存数据库文件的地方。 这里有一些文件夹,每一个文件夹都是一个数据库,我们随便 阅读全文
posted @ 2021-11-21 10:40 yudoge 阅读(493) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩