请问有什么方法可以提升使用 sql 语句查询笔记的效率嘛

请教一下,对于像这样比较大的 sql 语句,有什么方法可以提升一下运行的效率吗?这个查询语句是用 AI 生成的,但是 AI 给出的优化好像也不明显,感觉还是好慢

WITH RECURSIVE TitleBlocks AS ( -- 第一层,找到所有超级块 B 里的标题块(一级标题) SELECT b2.id, b2.content FROM blocks AS b2 WHERE b2.type = 'h' -- 标题块 -------!!!!!【在这里修改需要汇总的书籍名字】!!!!!--------- AND b2.markdown LIKE '%# 《亲密关系》-米勒-目录%'-- 超级块 B 的条件 UNION ALL -- 后续层级,找到所有子标题块(递归查找每个标题块的 parent_id) SELECT b2.id, b2.content FROM blocks AS b2 JOIN TitleBlocks AS tb ON b2.parent_id = tb.id -- 递归查找 parent_id WHERE b2.type = 'h' -- 继续筛选标题块 ), -- 定义 CTE FilteredBlocks 用于筛选 type 为 'i' 且包含标题块内容的记录 FilteredBlocks AS ( SELECT b1.markdown FROM blocks AS b1 JOIN TitleBlocks AS tb ON b1.markdown LIKE '%' || tb.content || '%' -- 只匹配包含标题块内容的记录 WHERE b1.type = 'i' -- 筛选出 type 为 'i' 的块 AND b1.markdown NOT LIKE '%00-功能测试%' ), -- 生成包含所有要统计类型的辅助表 Types AS ( SELECT '精彩文案' AS type UNION ALL SELECT '重要观点' AS type UNION ALL SELECT '内容讨论' AS type UNION ALL SELECT '内容有感' AS type ), -- 统计精彩文案数量 GreatCopywritingCount AS ( SELECT COUNT(*) AS count FROM blocks AS bb WHERE bb.type = 'i' AND bb.fcontent LIKE '%精彩文案%' AND bb.markdown LIKE '%精彩文案%>%' AND EXISTS ( -- 通过 EXISTS 查找 FilteredBlocks 中的匹配记录 SELECT 1 FROM FilteredBlocks fb WHERE REPLACE(REPLACE(fb.markdown, '\n', ''), ' ', '') LIKE '%' || REPLACE(REPLACE(bb.markdown, '\n', ''), ' ', '') || '%' ) ), -- 统计重要观点数量 ImportantOpinionCount AS ( SELECT COUNT(*) AS count FROM blocks AS bb WHERE bb.type = 'i' AND bb.fcontent LIKE '%重要观点%' AND bb.markdown LIKE '%重要观点%>%' AND EXISTS ( -- 通过 EXISTS 查找 FilteredBlocks 中的匹配记录 SELECT 1 FROM FilteredBlocks fb WHERE REPLACE(REPLACE(fb.markdown, '\n', ''), ' ', '') LIKE '%' || REPLACE(REPLACE(bb.markdown, '\n', ''), ' ', '') || '%' ) ), -- 统计内容讨论数量 ContentDiscussionCount AS ( SELECT COUNT(*) AS count FROM blocks AS bb WHERE bb.type = 'i' AND bb.fcontent LIKE '%内容讨论%' AND bb.markdown LIKE '%内容讨论%>%' AND EXISTS ( -- 通过 EXISTS 查找 FilteredBlocks 中的匹配记录 SELECT 1 FROM FilteredBlocks fb WHERE REPLACE(REPLACE(fb.markdown, '\n', ''), ' ', '') LIKE '%' || REPLACE(REPLACE(bb.markdown, '\n', ''), ' ', '') || '%' ) ), -- 统计内容有感数量 ContentReflectionCount AS ( SELECT COUNT(*) AS count FROM blocks AS bb WHERE bb.type = 'i' AND bb.fcontent LIKE '%内容有感%' AND bb.markdown LIKE '%内容有感%>%' AND EXISTS ( -- 通过 EXISTS 查找 FilteredBlocks 中的匹配记录 SELECT 1 FROM FilteredBlocks fb WHERE REPLACE(REPLACE(fb.markdown, '\n', ''), ' ', '') LIKE '%' || REPLACE(REPLACE(bb.markdown, '\n', ''), ' ', '') || '%' ) ) SELECT t.type AS 笔记类型, COALESCE( CASE WHEN t.type = '精彩文案' THEN gcc.count WHEN t.type = '重要观点' THEN ioc.count WHEN t.type = '内容讨论' THEN cdc.count WHEN t.type = '内容有感' THEN crc.count ELSE 0 END, 0 ) AS 笔记数量 FROM Types t LEFT JOIN GreatCopywritingCount gcc ON t.type = '精彩文案' LEFT JOIN ImportantOpinionCount ioc ON t.type = '重要观点' LEFT JOIN ContentDiscussionCount cdc ON t.type = '内容讨论' LEFT JOIN ContentReflectionCount crc ON t.type = '内容有感' GROUP BY t.type;
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24904 引用 • 102551 回帖
  • SQL
    128 引用 • 390 回帖 • 3 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9464 引用 • 43140 回帖 • 108 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 为什么要搞这么复杂,你的实际需求是什么?

    1 回复
  • SyTlr

    我的使用场景是,想把把阅读书本时产生的笔记 按不同的功能标签 汇总起来,另外统计不同的功能标签的笔记数量。

    所以设计了一个类似下面的结构:

    - [[书本名字反链]],#读书笔记标签# ## 书本章节1 ### [[主题反链]] - #功能标签1# 笔记内容

    因为 功能标签的父级块不是书本名字,所以就想到 多嵌套一层查询条件,通过匹配查找书本目录这个超级块里的章节名称(标题块)来找到对应的笔记内容 ,实现曲线救国

    帖子里的语句 是 汇总统计了 在这个结构下 4 个不同功能标签 对应的笔记数量

    3 操作
    SyTlr 在 2025-03-26 20:30:04 更新了该回帖
    SyTlr 在 2025-03-26 20:24:17 更新了该回帖
    SyTlr 在 2025-03-26 20:21:22 更新了该回帖
  • SyTlr

    emmm,用 gpt 重新写了一个查询语句,性能高了很多很多,贴在这里记录一下吧

    WITH RECURSIVE TargetBook AS ( -- 目标书籍 SELECT '《最好的我们》' AS book_name ), TargetExclusion AS ( -- 需要排除的内容 SELECT '%((%00-功能测试文档%))%' AS exclusion_pattern ), FilteredBlocks AS ( -- 只保留符合条件的内容块 SELECT * FROM blocks WHERE hpath LIKE '%/DailyNote-时间索引/%' AND content NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) ), BookChapters AS ( -- 选取目录超级块(确保是指定书籍的目录) SELECT b.id, b.content, b.markdown FROM FilteredBlocks AS b JOIN TargetBook tb ON b.fcontent LIKE tb.book_name || '-%' WHERE b.type = 's' AND b.markdown NOT LIKE '{{{col%' AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) UNION ALL -- 递归查找属于该书籍目录的所有章节块(标题 h) SELECT b2.id, b2.content, b2.markdown FROM FilteredBlocks AS b2 JOIN BookChapters AS bc ON b2.parent_id = bc.id WHERE b2.type = 'h' AND b2.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) ), RelatedNotes AS ( -- 直接包含对该书籍的反链引用的内容块 SELECT b.id, b.content, b.markdown, b.type, b.hpath FROM FilteredBlocks AS b JOIN TargetBook tb ON b.markdown LIKE '%((%' || tb.book_name || '%))%' AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) UNION -- 通过 refs 表反链引用书籍章节的内容块 SELECT b.id, b.content, b.markdown, b.type, b.hpath FROM FilteredBlocks AS b JOIN refs AS r ON b.id = r.def_block_id WHERE r.def_block_id IN (SELECT id FROM BookChapters) AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) ), -- 递归查找 RelatedNotes 的所有子块 RecursiveChildren AS ( SELECT b.* FROM FilteredBlocks b WHERE b.parent_id IN (SELECT id FROM RelatedNotes) UNION SELECT b.* FROM FilteredBlocks b JOIN RecursiveChildren rc ON b.parent_id = rc.id WHERE b.content NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) ), TagList AS ( -- 统一管理所有要统计的标签 SELECT '内容有感' AS 笔记类型, '%内容有感%#%' AS tag_pattern UNION ALL SELECT '内容讨论', '%内容讨论%#%' UNION ALL SELECT '精彩文案', '%精彩文案%#%' UNION ALL SELECT '重要观点', '%重要观点%#%' ), DesiredTags AS ( -- 筛选出符合 TagList 里定义标签的内容块 SELECT b.*, t.笔记类型 FROM RecursiveChildren b JOIN TagList t ON b.tag LIKE t.tag_pattern WHERE b.tag NOT LIKE '%#【专辑】%读书笔记#%' AND b.type = 'i' ), TagCounts AS ( -- 统计每个标签的笔记数量 SELECT t.笔记类型, COUNT(b.id) AS 数量 FROM TagList t LEFT JOIN DesiredTags b ON t.笔记类型 = b.笔记类型 GROUP BY t.笔记类型 ) -- 最终统计结果,保证所有标签都显示,即使没有笔记 SELECT t.笔记类型, COALESCE(tc.数量, 0) AS 数量 FROM TagList t LEFT JOIN TagCounts tc ON t.笔记类型 = tc.笔记类型 ORDER BY t.笔记类型;
  • SyTlr

    这是查询单个标签笔记的 sql

    WITH RECURSIVE TargetBook AS ( -- 这里定义目标书籍名称 SELECT '《我们纯真的青春》' AS book_name ), TargetExclusion AS ( -- 这里定义需要排除的内容 SELECT '%((%00-功能测试文档%))%' AS exclusion_pattern ), FilteredBlocks AS ( -- 只保留 hpath 符合条件的内容块 SELECT * FROM blocks WHERE hpath LIKE '%/DailyNote-时间索引/%' AND content NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除内容块中的不相关内容 ), BookChapters AS ( -- 选取目录超级块(确保是指定书籍的目录) SELECT b.id, b.content, b.markdown FROM FilteredBlocks AS b JOIN TargetBook tb ON b.fcontent LIKE tb.book_name || '-%' WHERE b.type = 's' AND b.markdown NOT LIKE '{{{col%' AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除不相关内容块 UNION ALL -- 递归查找属于该书籍目录的 **所有章节块(标题 h)** SELECT b2.id, b2.content, b2.markdown FROM FilteredBlocks AS b2 JOIN BookChapters AS bc ON b2.parent_id = bc.id WHERE b2.type = 'h' -- 只递归查找标题块 AND b2.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除不相关内容块 ), RelatedNotes AS ( -- 直接包含对该书籍的反链引用的内容块 SELECT b.id, b.content, b.markdown, b.type, b.hpath FROM FilteredBlocks AS b JOIN TargetBook tb ON b.markdown LIKE '%((%' || tb.book_name || '%))%' AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除不相关内容块 UNION -- 通过 refs 表反链引用书籍章节的内容块 SELECT b.id, b.content, b.markdown, b.type, b.hpath FROM FilteredBlocks AS b JOIN refs AS r ON b.id = r.def_block_id WHERE r.def_block_id IN (SELECT id FROM BookChapters) AND b.markdown NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除不相关内容块 ), -- 递归查找 `RelatedNotes` 的所有子块 RecursiveChildren AS ( SELECT b.* FROM FilteredBlocks b WHERE b.parent_id IN (SELECT id FROM RelatedNotes) UNION SELECT b.* FROM FilteredBlocks b JOIN RecursiveChildren rc ON b.parent_id = rc.id WHERE b.content NOT LIKE (SELECT exclusion_pattern FROM TargetExclusion) -- 排除子块中的不相关内容 ), ImportantPoints AS ( -- 筛选出 “#功能标签#” 的内容块 SELECT b.* FROM RecursiveChildren b WHERE b.tag LIKE '%精彩文案%#%' -- 确保包含 #功能标签# AND b.tag NOT LIKE '%#【专辑】%读书笔记#%' -- 确保不包含 #【专辑】%读书笔记# AND b.type = 'i' ) SELECT * FROM ImportantPoints ORDER BY CREATED;

推荐标签 标签

  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 107 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 161 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 541 回帖 • 2 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 592 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 25 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 14 关注
  • 996
    13 引用 • 200 回帖 • 6 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 6 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 663 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    78 引用 • 396 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 548 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 386 关注
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 6 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    431 引用 • 1250 回帖 • 599 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 821 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 4 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 756 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 298 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    88 引用 • 122 回帖 • 620 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 385 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖