随笔分类 -  数据库

摘要:PostgreSQL 18.3 查询优化器流程:standard_planner() 源码导读 1. 文档目标 本文按照 PostgreSQL 18.3 中 standard_planner() 的执行顺序,讲解默认查询优化器从 Query 到 PlannedStmt 的完整流程: 版本说明: 本文 阅读全文
posted @ 2026-07-28 16:05 aixueforever 阅读(120) 评论(1) 推荐(1)
摘要:本文以 DuckDB 的向量化执行模型为背景,详细解释三个问题: 存储层中的 ColumnSegment 如何被扫描为执行层的 DataChunk; DataChunk 经过 Filter 时,是复制数据还是使用选择向量; 两个表各自的 morsel/DataChunk 如何先 Filter,再分 阅读全文
posted @ 2026-07-25 12:45 aixueforever 阅读(106) 评论(0) 推荐(0)
摘要:DuckDB 存储结构:从逻辑表到磁盘 Block 1. 核心结论 DuckDB 原生表的主线只有一条: Table → Row Group → ColumnData → Column Segment → DuckDB Block → Buffer Manager → Vector / DataCh 阅读全文
posted @ 2026-07-19 14:52 aixueforever 阅读(217) 评论(0) 推荐(0)
摘要:统计信息维护 数据库为了让优化器做基数估计和代价估计,通常会维护一批统计信息。它们描述的是: 表有多大、列值怎么分布、索引是否有用、数据是否倾斜、不同列之间是否相关。 这些统计信息不一定每次查询都实时计算,而是由数据库周期性或按需收集。 一、数据库通常维护哪些统计信息 1. 表级统计信息 表级统计信 阅读全文
posted @ 2026-06-06 22:04 aixueforever 阅读(49) 评论(0) 推荐(2)
摘要:前置知识 语法树 AST 是 Abstract Syntax Tree,中文通常叫 抽象语法树。 在数据库里,用户写的 SQL 文本会先经过词法分析和语法分析,被转换成一种树形结构,这棵树就是 AST。它描述的是 SQL 的语法结构,而不是最终怎么执行。 例如 SQL: SELECT name, a 阅读全文
posted @ 2026-06-06 14:09 aixueforever 阅读(206) 评论(0) 推荐(1)
摘要:JIT 是 Just-In-Time Compilation,即“即时编译”。意思是:程序运行到某段代码时,才把原本解释执行的逻辑编译成 CPU 可以直接执行的本机机器码。PostgreSQL 文档给的典型例子是:不用一个通用表达式解释器去判断 WHERE a.col = 3,而是为这个具体条件生成 阅读全文
posted @ 2026-06-04 19:51 aixueforever 阅读(304) 评论(0) 推荐(2)
摘要:CRDT(Conflict-free Replicated Data Types,无冲突复制数据类型) CRDT是分布式系统中的一种数据结构设计方法,用来解决多副本数据在并发修改时如何自动合并且不产生冲突的问题。 CRDT 的核心目标是:在没有中心协调的情况下,让多个节点各自修改数据,最终自动收敛到 阅读全文
posted @ 2026-04-11 21:42 aixueforever 阅读(135) 评论(0) 推荐(1)
摘要:草图算法 草图算法 = 用极小空间 + 可控误差,快速近似处理超大规模数据 “草图算法(Sketching Algorithms)”是一类在大数据和流式数据处理中非常重要的技术,核心思想是:用一个非常小的“摘要数据结构(sketch)”来近似表示一个巨大的数据集,从而实现高效的计算。 草图算法(Sk 阅读全文
posted @ 2026-04-11 21:32 aixueforever 阅读(188) 评论(0) 推荐(1)
摘要:Hash Join(哈希连接) 是关系型数据库(如 MySQL、PostgreSQL、Oracle 等)在处理表连接操作时非常经典且高效的一种算法。它特别适用于大表之间的等值连接(Equi-join),尤其是在参与连接的列上没有合适的索引时。 简单来说,Hash Join 的核心思想是:利用较小的那 阅读全文
posted @ 2026-03-14 22:07 aixueforever 阅读(132) 评论(0) 推荐(4)
摘要:LSM-Tree 日志结构合并树 LSM-Tree(Log-Structured Merge-Tree,日志结构合并树)是一种分层、有序、面向磁盘的数据结构,其核心思想是充分利用磁盘的顺序写性能远高于随机写性能的特性,通过将随机写转换为批量顺序写来优化写入效率。这种结构最初源于Google的BigT 阅读全文
posted @ 2026-02-23 14:06 aixueforever 阅读(124) 评论(0) 推荐(0)
摘要:数据库列存储和行存储的区别 什么是列存储(Column-oriented Storage)? 在传统的数据库中,数据是一行一行写入和读取的。而列存储(Columnar Storage)顾名思义,是将数据表中的每一列数据单独集中存储在物理磁盘上。 这意味着,表中同一列的所有数值会被连续地存放在一起。比 阅读全文
posted @ 2026-02-23 13:38 aixueforever 阅读(439) 评论(1) 推荐(3)
摘要:数据库中的“哈希函数与布隆过滤器” 布隆过滤器的本质,就是一个有限长度的位数组(Bit Array)加上 \(k\) 个独立的哈希函数。 哈希函数决定了数据如何在这个位数组中留下“指纹”。 1. 核心映射关系:数据到比特位的“寻址器” 布隆过滤器本身不存储实际的数据库记录(如 user_id = ' 阅读全文
posted @ 2026-02-22 22:17 aixueforever 阅读(235) 评论(0) 推荐(0)
摘要:数据库三范式 数据库三范式 (Database Normalization) 就是一套“防坑指南”。 如果不遵守范式,你的数据库就会变成一个巨大的垃圾场,充满冗余数据(浪费空间)和异常(想改一个数据要改 100 个地方,改漏了就出 Bug)。 第 0 阶段:混乱的原始表 (Unnormalized 阅读全文
posted @ 2026-02-12 22:07 aixueforever 阅读(58) 评论(0) 推荐(1)
摘要:回表 1. 为什么会发生回表? 想象你在图书馆查书: 索引(Index):就像图书馆的索引卡片。卡片上写着:书名《数据库原理》,存放位置:3排-B架-12号。 表(Table/Heap):就像书架上的实物书。书里才有具体的内容(作者、出版社、正文)。 如果你只想知道书名,看卡片(索引)就够了。但如果 阅读全文
posted @ 2026-02-12 15:18 aixueforever 阅读(394) 评论(0) 推荐(2)