尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
执行 WITH RECURSIVE 查询长时间无结果问题分析
文章目录环境症状问题原因解决方案环境系统平台银河麒麟 海光版本9.0.4症状执行如下递归查询时SQL 长时间无返回结果数据库会话一直处于执行状态无法正常结束。WITHRECURSIVE subordinatesAS(SELECTid,name,manager_id,1ASlevelFROMemployeeWHEREid4UNIONALLSELECTe.id,e.name,e.manager_id,s.level1FROMemployee eJOINsubordinates sONe.manager_ids.id)SELECT*FROMsubordinates;示例数据如下id | name | manager_id ------------------------ 1 | 张总 | 2 | 李经理 | 1 3 | 王主管 | 2 4 | 赵组长 | 4 5 | 小孙 | 4 6 | 小周 | 4 7 | 钱经理 | 1 8 | 吴主管 | 7 9 | 郑组长 | 8执行 SQL 后终端一直无结果返回CPU 使用率持续升高需手动取消 SQL。问题原因原因是 员工表中存在循环引用Cycle数据。以上数据中id 4 manager_id 4 即 赵组长 │ └──────► 赵组长自己管理自己递归查询的执行过程如下第一次递归 查询 ID4 得到 4 第二次递归 查找 manager_id4 的员工 得到 4 5 6由于 ID4 再次被查询出来递归又会继续执行4 → 4、5、6 → 4、5、6 → 4、5、6 ……因此递归永远不会结束。由于 SQL 使用的是UNION ALL不会自动去除重复记录因此数据库会不断生成新的递归结果导致 SQL 一直执行直到达到资源限制或被人工终止。解决方案方案一修正错误数据首先检查是否存在员工管理自己的情况SELECT*FROMemployeeWHEREidmanager_id;如果查询到结果例如id | name | manager_id ------------------------ 4 | 赵组长 | 4说明数据存在异常。 应根据实际业务修改为正确的上级例如UPDATEemployeeSETmanager_id2WHEREid4;修改完成后再次执行递归查询即可正常返回结果。方案二检查是否存在循环引用除了自己管理自己还可能存在多个员工互相管理例如A → B B → C C → A这同样会导致递归无法结束。建议在导入或维护组织架构数据时检查是否存在循环引用避免形成闭环关系。方案三递归查询增加层级限制如果无法立即确认数据是否存在循环引用可以为递归增加最大层级限制避免 SQL 无限执行。 例如WITHRECURSIVE subordinatesAS(SELECTid,name,manager_id,1ASlevelFROMemployeeWHEREid4UNIONALLSELECTe.id,e.name,e.manager_id,s.level1FROMemployee eJOINsubordinates sONe.manager_ids.idWHEREs.level10)SELECT*FROMsubordinates;上述 SQL 最多递归 10 层即使存在异常数据也不会无限循环。方案四记录已访问节点避免重复递归对于层级查询建议记录已经访问过的节点避免重复访问同一员工。示例WITHRECURSIVE subordinatesAS(SELECTid,name,manager_id,ARRAY[id]ASpathFROMemployeeWHEREid4UNIONALLSELECTe.id,e.name,e.manager_id,s.path||e.idFROMemployee eJOINsubordinates sONe.manager_ids.idWHERENOTe.idANY(s.path))SELECT*FROMsubordinates;该方法能够有效避免因循环引用导致的无限递归是生产环境中推荐的递归查询写法。
RELATED

相关推荐

鸿蒙 ArkTS 实战:Self Discipline Contract 从自律契约到个人效率工具完整解析

鸿蒙 ArkTS 实战:Self Discipline Contract 从自律契约到个人效率工具完整解析

鸿蒙 ArkTS 实战:Self Discipline Contract 从自律契约到个人效率工具完整解析 前言 Self Discipline Contract 是一个基于鸿蒙 ArkTS 的个人效率类单页应用,主题围绕 目标承诺、惩罚条款、见证人、完成次数和契约文本 展开。它把看不见的状态、计划、…

📅 2026/10/8 13:27:40
实体企业短视频运营困局破解:好客搜“微客抖”如何重构获客逻辑?

实体企业短视频运营困局破解:好客搜“微客抖”如何重构获客逻辑?

一、 实体企业的短视频运营之痛 对于绝大多数实体企业而言,短视频运营是一场投入巨大但收效甚微的“苦战”。 内容生产效率低,人力成本高昂:组建一个专业的短视频团队,需要编导、拍摄、剪辑、运营等多个岗位,人力成本…

📅 2026/10/18 14:09:30
[具身智能-597]:RDK X5 4G/5G 模组对接云端完整方案 + 可运行代码示例

[具身智能-597]:RDK X5 4G/5G 模组对接云端完整方案 + 可运行代码示例

一、整体通信架构说明硬件:USB 4G/5G 模组插入 RDK X5 USB3.0,拨号后生成标准蜂窝网卡 wwan0;底层:QMI/MBIM/ECM/PPP 拨号建立蜂窝 TCP/IP 链路;上云主流 4 种工业方案:MQTT(物联网标准&#xf…

📅 2026/9/14 19:49:48
MORE NEWS

更多资讯

📰

Jev 框架入门:TypeSafe 约束解码与结构化输出实战

1. 初识 Jev:它到底是个什么东西第一次听到 Jev 这个名字,很多人会以为是某个新出的编辑器插件,或者又一个套壳的对话工具。我刚开始接触的时候也是这个反应,直到把它真正跑起来、接进自己的工作流里,才发现它想解决的…

📰

AI落地隐形地基:数据治理如何决定RAG与Agent的成败

1. 数据治理为什么成了AI落地的“隐形地基”这两年跟同行聊天,十句话里八句离不开大模型、RAG、Agent。大家都在聊怎么把模型接进业务、怎么把检索命中率从60%拉到85%、怎么让Agent自己规划任务。但聊着聊着,话题总会拐到一个特别不性感、却谁都绕不开的…

📰

ZCode全开源拆解:统一Agent运行时架构与三端一核设计

1. 从313MB争议说起:ZCode到底是个什么东西智谱把ZCode全开源这件事,在Agent开发圈子里炸开锅的直接导火索,其实不是开源本身,而是之前那场313MB的"偷传"争议。简单说,就是有用户发现ZCode在运行过程中&…

📰

从Claude Code到Pi:AI Coding Agent工具链迁移实战与Harness机制解析

1. 从 Claude Code 到 Pi:一场关于 AI Coding 工具链的理性迁移最近半年,我身边不少做 AI Coding 的朋友都在悄悄换工具。不是换模型,也不是换 IDE,而是把日常写代码时用的那个“命令行里的 AI 搭档”从 Claude Code 换成了 Pi。这…

📰

AI编程助手技术路线对决:Rust版Codex与TypeScript版ZCode架构深度解析

1. 从两个数字说起:188 万行与 84 万行背后的技术路线分歧第一次看到“188 万行 Rust 对 84 万行 TypeScript”这个对比时,我的直觉是:这不是一个简单的代码量比较,而是两种截然不同的工程哲学在 AI 编程助手这个赛道上的正面碰撞…

📰

ERP与电商平台高效对接实战:金蝶云星空与旺店通集成方案

1. 项目背景与核心价值去年底我们团队接到一个紧急需求:某知名母婴品牌需要将其金蝶云星空ERP系统与旺店通电商平台在两周内完成全链路对接。这种跨系统对接项目通常需要1个月以上的实施周期,但客户为了赶上双十一大促,提出了这个看似不可能完…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬