花拾录

知识库

数据库AI2026/09/300 阅读

MySQL 联合索引最左前缀原则:用执行计划验证哪些查询真的用上了索引

什么是联合索引的最左前缀原则 联合索引(复合索引)是指包含多个列的索引,例如 INDEX idx a b c (a, b, c)。MySQL 在使用联合索引时,会遵循 最左前缀原则 :查询条件必须从索引的最左列开始,并且不能跳过中间的列,才…

#MySQL#联合索引#最左前缀#执行计划#索引优化
数据库AI2026/09/270 阅读

数据库连接数不是越大越好:从排队论看连接池容量的合理上限

为什么连接数不是越多越好? 很多开发者遇到数据库响应变慢时,第一反应是调大连接池的最大连接数,认为“更多连接 = 更高并发”。但实际效果往往适得其反:数据库 CPU 飙升、响应时间反而更长。这背后的原因可以用排队论解释。 数据库连接的本质:…

#连接池#性能优化#排队论#数据库调优
数据库AI2026/09/270 阅读

从零理解 B 树与 LSM 树的写入放大:为什么写多的场景不该照搬 MySQL 的索引结构

引言 在数据库选型时,MySQL 的 InnoDB 存储引擎常被当作默认选择。但你是否想过:为什么写多的场景(如日志、时序数据)往往推荐使用 LSM 树(Log Structured Merge Tree)而非 B 树?核心原因之一是 写入…

#B树#LSM树#写入放大#存储引擎#数据库索引
数据库AI2026/09/270 阅读

MongoDB 文档嵌套太深导致查询变慢:什么时候该拆成引用式建模

问题现象 在 MongoDB 中,嵌套文档能减少关联查询,但嵌套过深会带来性能问题: 查询变慢,尤其是需要遍历深层数组或对象时。 文档体积膨胀,可能触及 16MB 文档上限。 更新深层字段时,整个文档可能被重写,影响写入性能。 索引难以有效…

#MongoDB#数据建模#查询优化#嵌套文档#引用式建模
数据库AI2026/09/240 阅读

数据仓库维度建模入门:星型模型与雪花模型该怎么选

为什么需要维度建模 在数据仓库建设中,维度建模是一种以业务过程为核心、面向分析场景的建模方法。它由 Ralph Kimball 提出,核心思想是将数据组织为 事实表 (存储可度量的业务指标)和 维度表 (存储描述性属性),从而让业务人员能够…

#数据仓库#维度建模#星型模型#雪花模型
数据库AI2026/09/240 阅读

数据库事务隔离级别用例子说话:脏读、幻读到底长什么样

事务隔离级别是数据库面试和日常开发中的高频话题,但很多人只是背下了“读未提交、读已提交、可重复读、串行化”这四个名词,对脏读、不可重复读、幻读的具体表现却一知半解。本文用两个典型例子,把抽象概念变成看得见的现象。 准备工作:一张账户表 以下…

#事务隔离级别#脏读#幻读#MySQL#并发控制
数据库AI2026/09/220 阅读

MySQL 执行计划 type 字段逐级解读:从 ALL 到 const 的取舍

为什么 type 字段如此重要 在 MySQL 的 EXPLAIN 输出中,type 列直接反映了 访问类型 ,即 MySQL 决定如何查找表中的行。它从最差到最优大致为:ALL < index < range < ref < eq ref…

#MySQL#执行计划#索引优化#EXPLAIN
数据库导入2026/09/220 阅读

删除文章后留下悬空的讨论帖:外键是 SET NULL 不是 CASCADE

你写了个清理脚本,把过期文章批量删掉。跑完去看站点,发现一堆讨论帖还挂在那里,点进去指向的页面已经 404 了。 现象 删除文章之后,站内还残留着指向已不存在页面的"空壳"讨论帖——用户能点进来,但页面主体是空的或者直接 404。看起来像删…

#数据清理#级联删除#外键#PostgreSQL
数据库导入2026/09/220 阅读

把文件改名或移动进监控目录,媒体库毫无反应仍显示旧条目

你往媒体库里加片子,习惯用改名或移动的方式——下载好一个临时名字的文件,改成正名拖进目录;或者把别处的文件直接 mv 进来。可发现媒体库 根本不更新 ,目录里明明有新文件,库里还是显示旧条目。奇怪的是,如果你 新建 一个文件进目录,它又能立…

#监听机制#增量扫描#媒体库#inotify#文件系统事件
数据库导入2026/09/220 阅读

媒体库目录改了个名,库里的影片条目全部"消失"了

你在文件管理器里把媒体库的目录改了个更顺眼的名字,本以为是件无关紧要的小事。回到媒体库软件里一看—— 一个片子都扫不到了 ,界面空空如也。你打开文件夹,文件明明都还在,一个没少。明明只是改了个名,怎么像"文件全丢了"? 现象 媒体库的目录被…

#数据一致性#悬空引用#路径持久化#媒体库#SQLite
数据库导入2026/09/220 阅读

SQLite 全文检索搜两个中文字返回空:trigram 分词器的长度限制

你给站内搜索加上了全文检索:建表、灌数据、写查询,一切顺利。可当你在搜索框里敲下最常见的两字中文词——"列表""设置""评论"——结果一条都没有。换成三个字、四个字,又正常了。你会怀疑是数据没进去,或者中文分词出了问题,但重建索引也没用。 …

#中文分词#trigram#FTS5#全文检索#SQLite
数据库导入2026/09/220 阅读

资料保存后重新打开全是空白:写进一张表,却从另一张表读

用户在自己的资料编辑页改好昵称、头像、简介,点保存,提示"保存成功"。可一刷新、一重新打开,页面又是空的——所有字段都回到了空白。用户以为"没保存上",其实数据好好地躺在库里,只是 存进了另一张表 。 现象 表现非常稳定,也很有迷惑性: 编…

#数据映射#回显#ORM#读写一致性#分表
数据库导入2026/09/220 阅读

Redis 连接池参数配了却没生效,高并发下连接被悄悄耗尽

你在配置文件里认真写好了 Redis 的连接池参数——最大连接数、最大空闲、等待超时,写得明明白白。启动一切正常,日志里没有任何报错。可一到大促、压测或流量高峰,应用就开始大面积超时、报"连接耗尽"。你把配置文件翻来覆去看了十遍,数值明明没…

#高并发#自动配置#静默失效#连接池#Redis
数据库导入2026/09/220 阅读

ORM 升级后分页插件类凭空消失,编译直接报找不到类

你只是把项目里的一个依赖从旧版本升到新版本,代码一个字没动,重新构建时却直接挂掉,报错指向一个你从没手动引用过的"分页插件类"。翻遍了自己的业务代码也找不到它,可编译器就是咬定这个类不存在。 现象 构建日志里是这样的: 或者在运行启动时报类…

#变更记录#编译报错#分页#依赖升级#ORM
数据库导入2026/09/220 阅读

原生查询返回的整数是 BigInt,直接丢进 in 筛选就报错

你用 ORM 的原生查询搜了一批记录,拿到 id 列表,顺手拼成 in [...] 去做第二次查询。结果报错,说类型不对。明明打印出来就是数字啊。 现象 用原生查询拿到的结果,拼成一个 in [...] 查询时报错: 或者: 打印这些值的时…

#类型陷阱#ORM#BigInt#JavaScript
数据库导入2026/09/220 阅读

Prisma 大版本升级后,连接串不能再写在 schema 文件里了

你只是把 ORM 升了个大版本,npx prisma 一跑,直接报错说 datasource 的 url 属性不再支持写在 schema 文件里。升级说明没看,踩了个正着。 现象 执行 Prisma 命令行时报错,大意是: 而 schema…

#数据库连接#版本升级#ORM#Prisma
数据库导入2026/09/220 阅读

PostgreSQL 说"表不存在",其实是大写表名没加引号

你想在终端里查一下某张表的数据,敲了 select from Article,PostgreSQL 回你一句 relation "article" does not exist。你去数据库里看,表明明在。 现象 在命令行里查询某张表报错: …

#ORM#命令行#标识符大小写#PostgreSQL
数据库导入2026/09/220 阅读

连接串密码里有 @ 和 !,客户端把后半截当成了主机名

同一个数据库,用命令行工具连得好好的,用应用代码连就报"主机名解析失败"。密码是对的,主机也是对的,但客户端把密码的一部分当成了主机名。 现象 从某个应用用连接串连接 PostgreSQL 时报错,连不上,错误信息指向一个 奇怪的主机名 —…

#密码#URL 编码#连接串#PostgreSQL
数据库导入2026/09/220 阅读

新加的 PostgreSQL 放行规则不生效:pg_hba 是首个匹配生效

你为了允许一个新网段连数据库,在认证配置里加了一条放行规则。保存、reload、测试——还是被拒。规则明明写了,为什么不生效? 现象 新加的一条认证放行规则不起作用,从某些地址连接数据库仍然被拒绝。反复检查规则本身的写法(类型、库名、用户名…

#顺序敏感#认证规则#pg_hba#PostgreSQL
数据库导入2026/09/220 阅读

PostgreSQL 用错密码也能连上:官方镜像对回环地址默认是 trust

你在测试环境验证数据库认证是否正常,故意输了个错密码——结果连上了。不是记错了密码,而是认证压根没生效。 现象 用错误的密码执行 PostgreSQL 连接,居然成功了: 进去执行 select 1 也正常返回。看起来密码认证形同虚设,安全…

#Docker#pg_hba#认证配置#PostgreSQL