MySQL InnoDB索引底层:从B+树到回表、覆盖索引、最左前缀一次讲透
很多人被问过这样一个问题为什么MySQL的InnoDB索引要用B树而不是二叉搜索树不是红黑树也不是哈希表我见过不少同学把《高性能MySQL》里的几段话背得很熟能流畅说出“磁盘IO次数少”“叶子节点有序”“支持范围查询”这些关键词。但一旦换成实际场景——比如“我把主键设计成UUID会怎么样”“为什么我明明建了索引写like %xxx%却还是不走索引”“联合索引(a,b)为什么查询条件只有b时索引就废了”——就不知道怎么从数据结构层面解释了。这篇文章不打算复述教科书我想把索引底层那套东西掰开讲清楚从二分查找一步步走到B树再把回表、覆盖索引、最左前缀、索引下推这些高频概念都还原到树结构和磁盘读取的视角上重新看一遍。如果你正在面试、准备系统设计或者日常排查慢SQL时经常被索引问题卡住这篇应该能帮你把零散的知识点串成一条线。1. 先明确一件事索引问题为什么值得从底层看很多人的困惑其实不是“查了很多资料”而是资料太多、概念太散。今天背一个“最左前缀”明天记一个“覆盖索引”后天再抄一个“索引失效清单”感觉都会了真到现场还是判断不了。1.1 面试场景一上来就问B树到底在考什么面试官问B树表面考的是“索引结构”实际考的是三件事你懂不懂磁盘IO的特性你懂不懂数据结构的取舍你懂不懂MySQL为了工程落地做了哪些妥协。这三个层次缺一个答案都会显得单薄。我举个反差明显的例子。二叉搜索树在内存里查找一个有序数组性能很不错范围查询还能靠中序遍历。但数据库的场景是——数据量动辄几百万、几千万行不可能全放内存绝大多数数据在磁盘上。磁盘随机访问一个扇区耗时是内存访问的几个数量级。树如果又高又瘦每一层都可能触发一次随机IO查一条记录等于做两三次磁盘寻道完全顶不住。B树是一个又矮又胖的树三层基本能覆盖千万级数据再加上叶子节点连成链表做顺序扫描磁盘引擎就舒服多了。1.2 生产场景慢SQL与索引选择我还有个更直接的体会排查线上慢SQL时explain看到的type、possible_keys、key_len、Extra这四个字段任何一个都需要底层知识才能看明白。比如key_len为什么能算出联合索引到底用到了哪几列因为它反映的是B树索引路径上实际比较了多少字节。Extra里的Using index和Using index condition分别对应覆盖索引和索引下推这两个机制一个靠“叶子节点存了足够多的列”一个靠“存储引擎层先把条件过滤一轮”。不懂树结构这几个字段就是死记的字母组合。所以我的观点很明确索引底层数据结构不是纯理论它是一张地图。平时查优化技巧是“按图找路”读懂了图以后遇到没见过的SQL异常也能自己推断方向。2. 从二分查找到B树一步一步看索引结构是怎么变出来的与其直接背“B树有xxx优点”不如把它当成一道设计题如果让你给MySQL设计一套适合磁盘场景的查找结构你会怎么做2.1 二分查找索引效率的底线参照任何有序数据结构最终都绕不开二分查找的精神每次把待搜索区间砍半查找代价从O(n)降为O(log n)。数组因为内存连续二分查找在内存里非常快但要对磁盘上几千万条记录做二分第一步就把数据页固定成连续数组这件事不现实——数据库的物理存储是按块或页管理的数据会增删改一个满了的页要跟相邻页重新分配空间连续数组结构根本维护不了。二分查找的意义在于它给出了一个效率参照如果某个索引结构能让定位过程以近似对半的收敛速度进行就已经是合格线了。树结构正是顺着这个思路来的。2.2 二叉搜索树与平衡树为什么树才是正解二叉搜索树天然维护了有序性查找流程可以根据键值大小每层只进入一个分支。但它有个致命缺陷插入顺序很容易让它退化成一条链表复杂度直接回到O(n)。所以出现了AVL树要求左右子树高度差不超过1每次插入都可能旋转红黑树放宽了一些限制允许最多一侧黑高度不平衡换来更少的旋转次数。但放到数据库场景里问题不在“平不平衡”而在每个节点存的东西太少了。一个节点只存一个key、两个指针树的高度会随着数据量膨胀得非常快。一千万条数据即使平衡高度也在20层以上。而磁盘上树每一层的定位都可能对应一次随机IO20次磁盘寻道对于一次简单查询来说完全不可接受。我们需要的是“一层能多看几个key”的结构。2.3 B树把“一层”当“一页”用B树的关键改动就是让每个节点存储多个key和多个指针配合磁盘页的大小来设计节点容量。InnoDB默认一页16KB索引读的最小单位是一整个页而不是一条记录。所以最适合的做法就是让一个页充当树上的一个节点页里有几十上百个索引项树变矮了一次IO能从磁盘拉回大量可比较的key。不过B树的叶子节点和非叶子节点都保存数据。这个设计在内存场景没什么问题但磁盘场景的问题来了范围查询时B树的叶子节点并非连续你可能要从某个叶子节点跳到另一个兄弟节点中间隔了几层父节点遍历过程中需要重复追溯父节点路径范围查询做不到高效的顺序访问。2.4 B树把指针与数据分离范围查询变成顺序读B树做了两个关键改动。第一个改动是内部节点只存索引键和指针不再存真实数据。这样同样一个16KB的页能容纳的索引项数大幅提升。按一个典型估算非叶子节点每条索引记录十几字节一个页大约能容纳1000个指针。两层就能索引百万级记录三层就能到千万级。树高从20多层压到3到4层查询时根节点几乎永远在内存里很多情况下真正需要读盘的就一两层。第二个改动是叶子节点之间用指针连成了链表叶子节点本身也按key有序存放。范围查询一旦定位到起始叶子剩下的工作就是沿着链表往下读相邻叶子。磁盘读取是顺序读还是随机读性能差异差一个数量级这个链表结构让范围扫描获得了接近顺序读的体验。InnoDB实现里还保留了双向指针倒序扫描也能顺着链表往回走。这里我顺带解释一个常见误区总有人说“B树内部节点不存数据所以同样高度能存更多数据”这不完全准确。根本收益不只是“更多数据”而是把索引定位和实际数据读取解耦了。定位路径上只需要处理更小的索引条目真正的数据全部沉淀在叶子层范围扫描的时候才能一页接一页地顺序读过去。两个优势是互相成就的。3. B树上的查询与写入一条SQL的完整旅程理解了B树的结构接下来把“查询”和“写入”挂回到真实运行上去。这一节我尽量用“一次查询对应几次IO”这种账本来算会让你对索引的感知更实在。3.1 等值查询与树的层数百万级数据的磁盘IO账单比如你跑一条select * from user where id 1234567主键索引也就是聚簇索引的查询路径是这样的根节点页大概率在Buffer Pool里从内存里找到下一层的页号。如果第二层也在缓冲池继续往下如果不在就从磁盘读这一页。16KB一次随机IO。到了叶子节点页同样可能命中缓冲池可能读一次盘。三层B树的典型查找磁盘IO成本通常就是1到2次而且第二次往往也是从叶子节点页读取真实数据。百万级数据只要2到3次IO查完这就是“矮胖”树的直接好处。对比一下如果一行记录一个节点一千万行就是几千万个节点树高奔着二三十层去一次查询二十次随机IO基本就废了。3.2 范围查询叶子节点链表如何救回顺序读where id between 100 and 100000这种范围SQLB树定位到id100的叶子节点后后续记录都按主键顺序排在链表上。每个叶子页内部有序页与页之间也连续扫描过程能大量利用顺序预读。这里也是为什么InnoDB聚簇索引能直接支撑order by id而不需要额外排序的原因——B树本身就维护了主键全序。反过来说如果你把某个普通字段建了二叉树或者哈希索引“等值可能很快但范围几乎无解”。B树对这种“部分有序、按序输出”的查询模式是天然贴合的。3.3 写入、页分裂与主键顺序一个被低估的隐形代价很多人建索引只考虑查询不考虑写入。每个B树节点有容量上限节点满了就必须分裂把一部分记录挪到新页。这里有个工程细节如果写入的主键是单调递增的新记录基本都落在当前最右侧的叶子节点上旧的叶子节点写完就稳定了分裂很少发生。如果主键是UUID这种随机值每次插入都可能落在任意位置的叶子节点上目标页动不动就满频繁分裂加上物理页分配错位写放大和碎片问题就来了。这也是为什么InnoDB官方和几乎所有DBA都推荐自增整型主键。不光是为了“好生成”更是为了让数据按物理顺序追加写入避开随机插入带来的页分裂。4. 哈希索引与自适应哈希快但为什么始终是配角聊完B树再看一个常被拿来对比的结构哈希索引。MySQL的Memory引擎默认用哈希索引InnoDB也有自适应哈希索引Adaptive Hash Index。它到底解决什么问题又为什么当不了主角4.1 哈希索引的适用边界等值查询确实快哈希索引底层是哈希表等值查询、in通过哈希函数一次性定位到槽位或链表的对应位置理论复杂度O(1)在这一点上比B树的O(log n)明显更快。但它的短板一样明显不支持范围查询哈希的下一种状态是“不是有序的没法给区间排序输出”。不支持排序order by直接依赖全文。不支持部分列匹配哈希是针对整行键值计算的联合索引(a,b)对where a1是无法用哈希索引定位的。哈希冲突需要处理极端情况下退化成链表扫描。数据库的真实查询里范围查询、排序、部分列匹配是家常便饭所以哈希索引注定只能在特定场景当快车道成不了主干道。4.2 自适应哈希索引InnoDB的自动加速机制InnoDB的自适应哈希索引值得多说一句。它并不是你手动建出来的索引而是InnoDB自己在Buffer Pool里维护的哈希结构针对那些被高频精确匹配的B树页面做缓存映射。命中后可以绕过部分B树遍历直接定位到对应的缓冲页。它的确是个加速器但本质上仍然受限于哈希结构的固有短板只适合等值匹配不具备范围能力。而且它是全局构建的极端情况下可能带来额外的锁竞争与内存占用。所以InnoDB把它设计成“自适应”由内部监控决定是否构建、是否关闭不推荐人工干预。4.3 为什么主索引仍然坚持B树排序与范围才是刚需MySQL把B树作为绝对主力不是因为哈希不好而是因为主索引需要承担太多职责主键有序、范围扫描、order by、索引覆盖、回表定位。这些全是排序语义。哈希在排序场景毫无办法所以哪怕它等值查询再快也只能做辅助。想通这一点你在任何讨论“为什么不用哈希索引”的场合都能用自己的话组织答案因为数据库的访问模式不等同于缓存KV范围与顺序访问才是常态。5. 回表、覆盖索引、最左前缀、索引下推四个高频概念的底层逻辑这一节是面试和实战的重头戏。把这四个概念全部落到B树的物理结构上你会发现它们其实一点都不难记。5.1 回表聚簇索引与二级索引的分工先说两个基础概念。聚簇索引就是主键索引它的叶子节点直接存放整行数据数据按主键顺序物理聚簇。二级索引也叫辅助索引或普通索引叶子节点存的是“索引键的值 对应的主键值”并不直接存整行数据。所以select * from user where name 张三在只有name上建了普通索引的情况下执行的其实是两步在name索引树上找到所有name张三的叶子取出主键id。再用这些id到主键索引树上查完整行这一步就叫回表。回表的本质是“两个B树的接力”。这也是为什么二级索引不要建太多——每个索引都是一棵独立的B树每次插入都要同时维护回表本身也有消耗。5.2 覆盖索引从“两棵树都查一遍”到“一棵树搞定”回表有个优化思路既然二级索引的叶子节点上已经有了索引键和主键那只要查询的列都在这两个集合里是不是就不用回表了比如建了联合索引(age, city)现在跑select age, city from user where age 30。优化器发现age和city都在索引树上直接扫描二级索引就能拿到结果不需要再回主表。explain的Extra里会看到Using index这就叫覆盖索引。覆盖索引能显著减少IO尤其当二级索引本身就比聚簇索引小很多的时候。如果要返回的字段特别多与其贪心覆盖不如直接走聚簇索引回表。所以真正设计覆盖索引时要把“需要覆盖的列”控制在合理范围内别让索引无限膨胀。5.3 最左前缀复合索引的底层排序顺序复合索引在很多面试题里都是老大难。关键在于理解复合索引在B树里到底是怎么排序的先按第一个列排序第一列相同的记录再按第二列排序以此类推。就像查字典时先比首字母首字母相同再比第二个字母。所以联合索引(a, b, c)在物理上支持以下查询模式where a1定位很直接第一列有序。where a1 and b2第一列先筛同组里第二列有序能用。where a1 and b2 and c3完整路径完全能用。where b2第一列直接跳过了。索引里b只是在a相同的前提下有序全局来看b是乱序的索引没法定位只能退化。where a1 and c3a能用c用不了定位因为a相同的情况下c未必有序。能连续匹配到的前缀列数量就对应key_len的长度。这也是面试官经常细抠的地方——别看写了三列索引key_len可能只用到前两列。5.4 索引下推把过滤动作放在更靠近页的地方MySQL 5.6引入了索引下推Index Condition PushdownICP。看名字很抽象例子一下就懂联合索引(age, city)查询where age30 and city like %市%。没有ICP时引擎会先用age30找到一批主键然后回表把整行读出来再用city like %市%过滤。这里的问题是city like %市%没法用索引定位左模糊但city字段本身在索引树上就有。先回表再过滤等于白回表了一次。有了ICP存储引擎在二级索引的叶子节点层就能直接读索引上的city值做过滤过滤掉不匹配的记录后再回表。explain的Extra会显示Using index condition。说白了就是让B树叶子节点上现成的索引列先在存储引擎层把第一道关卡用掉减少回表次数。这对那些索引列在、但无法用于定位的条件非常有效。6. 建索引时最需要想清楚的几个选择题主键、前缀、失效场景与维护到了工具层面很多“规则”其实是底层结构推导出来的结果。这一节把最常见的几个问题汇总一下。6.1 主键怎么选自增、UUID与业务主键的权衡回到第三节讲的页分裂我们很容易得出一个重要结论自增整型主键逻辑递增写入新数据永远追加在B树最右端老叶子页满载后不再变化页分裂很少物理顺序好二级索引存储的主键值也短。UUID或随机字符串主键插入位置完全随机目标页大概率已满频繁页分裂物理离散度大碎片多写放大严重。二级索引里每个索引项都要连带存这个长主键整棵索引树的体积也会膨胀。业务主键比如身份证号、订单号如果业务上必须唯一且稳定可以用但要评估长度和写入模式。长度太长会让二级索引体积变大不是递增趋势也会引发随机写入问题。我的建议很朴素默认用BIGINT UNSIGNED AUTO_INCREMENT或BIGINT类型的雪花ID别为了“看起来有意义”去选UUID做主键除非你有非常强的理由。6.2 前缀索引空间换时间的真正代价字符串很长比如email列如果整列建索引索引树会很大。MySQL支持index(email(10))只取前10个字符建索引节省空间。但有两个代价很容易被忽略无法用覆盖索引。索引里只存了前缀没有完整值查完整email还是得回表。排序不支持。order by email需要完整值的全序前缀索引只有“前10位”的信息排序退化。所以前缀索引只适合“索引很大、只需要等值定位”的场景不要在需要排序或覆盖的字段上盲目用。6.3 常见的“索引明明有但没法用”的场景基于B树“有序才能定位”的特性很多网上流传的“索引失效”规则其实能自己推出来。挑几个高频的写一下场景失效原因解决思路where age * 2 10对索引列做运算破坏了列本身的排序值改写为age 5MySQL 8.0可用函数索引where name like %张%左模糊无法利用B树的有序前缀改成右模糊张%或用全文索引/ES外挂where mobile 13800000000mobile是varchar隐式类型转换索引列被转成数值应用程序里就别传数字或确认字段类型本身关联SQL两边字符集不同隐式转换破坏索引列统一为utf8mb4or条件一侧无索引无法在索引树上同时满足两个分支拆成union all或两侧都建索引还有一个容易判断错的情况不是索引列必须“保持原样”而是索引列要能保持有序性。所有能让列失去原始秩序的操作——函数、类型转换、左模糊、字符集转换——都有可能让优化器放弃索引。明白这条主线比背几个固定场景有用得多。6.4 索引碎片、统计信息与维护节奏B树不是静态的页分裂、随机删除都会留下物理空洞。长期频繁增删改的表索引会出现碎片表现为空间变大、扫描页数变多、缓存命中下降。常见维护办法是OPTIMIZE TABLE或ALTER TABLE ... FORCE本质是重建表让B树按顺序重新物理布局。另外优化器是否走索引依赖统计信息。统计信息不准优化器可能选择全表扫描。MySQL会根据采样自动更新统计信息分析类操作ANALYZE TABLE也能手动刷新。我遇到过几次“明明索引能走但没走”的问题最后发现是统计信息里的行数严重滞后。我个人的操作节奏是大表做完批量导入后立刻ANALYZE TABLE更新统计信息周期性任务里加一个低频的碎片检测对碎片率超过阈值的索引做重建上线新查询前一律explain看一遍key_len和Extra。这套流程跑下来绝大多数索引问题都能在生产环境爆发之前拦住。索引这个话题聊到B树其实只是起点但如果没有这层底层认知后面所有优化技巧都会感觉“飘在空中”。把一次SQL查询想象成在树上游走把一次插入想象成叶子节点可能发生的分裂很多曾经靠死记的规则就变成了顺理成章的设计选择。这也是我一直坚持追溯底层的原因——面试时能让你和别人拉开差距的往往不是背得多而是能不能把每一层选择背后的取舍讲透。

相关新闻

JavaWeb体育竞赛管理系统开发指南:核心设计与避坑实践

JavaWeb体育竞赛管理系统开发指南:核心设计与避坑实践

简介:基于JavaWeb的体育竞赛管理系统毕业设计资源包,主要面向Java初学者、高校毕设学生及需要快速落地竞赛管理场景的开发者,覆盖运动员在线报名与成绩查看、管理员用户与赛程审核、裁判员成绩录入与公示等完整业务链路。包内共2662个文件&am…

2026/10/1 17:55:25 阅读更多 →
Towards Applying Large Language Models to Complement Single-Cell Foundation Models

Towards Applying Large Language Models to Complement Single-Cell Foundation Models

文章主要内容总结 本文聚焦于大语言模型(LLMs)与单细胞基础模型(如scGPT)的互补应用,旨在解决单细胞基础模型无法利用生物文本信息的局限性。 研究背景:单细胞基础模型(如scGPT)在单细胞组学任务中表现优异,但仅基于基因表达数据训练,无法利用海量生物文本知识;而L…

2026/10/1 17:54:24 阅读更多 →
TdxHqApi.dll 实时行情采集实战:DllImport 封装、轮询节奏与避坑指南

TdxHqApi.dll 实时行情采集实战:DllImport 封装、轮询节奏与避坑指南

简介:基于TdxHqApi.dll的股票实时数据采集系统实现涵盖从行情服务器动态取数到协议解析、指标计算的全链路方案,按数据接入层、协议解析层、业务逻辑层三层组织,实现证券代码、最新价、分时量、买卖盘挂单等核心指标的实时捕获,并…

2026/10/1 17:54:24 阅读更多 →

最新新闻

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

云原生容器编排CLI运维 【免费下载链接】k9s 🐶 Kubernetes CLI To Manage Your Clusters In Style! 项目地址: https://gitcode.com/GitHub_Trending/k9s/k9s 点击查看 免费下载 导读 K9s v0.1.3 是该项目早期发展中一次承上启下的关键发布&#xff1…

2026/10/1 18:39:46 阅读更多 →
计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

做虚拟电厂优化调度这几年,我几乎每个月都会碰到同行在群里问同一个问题:垃圾焚烧、碳捕集、电转气这些单元单独看都很“绿”,但把它们放进同一个虚拟电厂里到底该怎么配合?不少人的模型里各算各的,碳捕集出来的二氧化…

2026/10/1 18:39:46 阅读更多 →
嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习找工作第十七天--第一个项目(Linux个人博客) 走到第十七天这个节点,算是一个值得停下来认真复盘的位置。前面两周多的时间里,大概率已经啃完了 Linux 基础命令、vim 的基本操作、环境变量的概念,甚至可能被…

2026/10/1 18:39:46 阅读更多 →
AI论文能洗白吗?实测Paperxie降AIGC率真相

AI论文能洗白吗?实测Paperxie降AIGC率真相

这段时间后台总有读者追着我问同一件事:用 AI 写完论文以后,拿去跑 Paperxie 这类降重工具,出来的 AIGC 率到底能不能压到个位数?尤其是知网、维普据说要在 2026 年执行更严的新规,很多人怕现在辛辛苦苦改完&#xff0…

2026/10/1 18:39:46 阅读更多 →
基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

简介:一套基于U-Net的医学影像分割系统完整项目源码,适合计算机、人工智能、自动化等专业学生完成毕设、课程设计或医学影像分割入门实践,也便于小白进阶学习。项目实现了从数据标注到模型部署的全流程,包含标注格式转换、训练与预…

2026/10/1 18:39:46 阅读更多 →
AI求职Demo失效真相:从玩具到产品的能力表达重构

AI求职Demo失效真相:从玩具到产品的能力表达重构

1. 这不是技术问题,是求职信号系统失灵了 “做了3个AI Demo,为什么还是拿不到面试?”——这句话我去年在技术社区刷到不下二十次,每次看到都下意识点开,不是因为好奇,而是太熟悉了。熟悉到能一眼看出提问者…

2026/10/1 18:38:45 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →