【问题标题】:bad performance for recursion query递归查询性能不佳
【发布时间】:2021-06-09 08:53:59
【问题描述】:

我们有一个包含文档和文件夹的系统,每个文档和文件夹对每个用户都有不同的访问权限 数据库已经包含数百万数据,文档的最终访问应该做递归,以确保用户可以访问所有父文件夹 搜索性能很差,我们尝试了很多想法,但仍然面临性能问题

【问题讨论】:

  • 请检查here 在期待性能问题帮助的同时至少应该发布什么...对于您的情况,目标表的索引定义尤其相关,当然 查询您与执行计划和表的基本统计信息一起使用
  • 您希望我们能在这里做什么?我们不知道您的架构,例如你有什么索引来改进数据库查找。您没有展示您当前拥有的 SQL,那么我们怎么知道如何改进它呢?您谈论“确保用户具有访问权限”,但没有显示有关该信息的任何内容,并且您遇到的任何性能问题很可能与该访问权限逻辑有关。
  • 您是否分析过您的程序以了解潜在问题可能出在哪里?

标签: java oracle performance recursion


【解决方案1】:

你应该像这样使用with clause。 (sqlite3 示例)

create table tree (id int, parent_id int);
insert into tree (id, parent_id) values
(1, null), (2, 1), (3, 1), (4, 1), (5, 2), (6, 2), (7, 3), (8, 7);
with r as (
    select * from tree where id = 8
    union all
    select tree.* from tree, r where tree.id = r.parent_id
) select * from r;

输出(所有父母为 8):

8|7
7|3
3|1
1|

树形结构:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多