【问题标题】:How to improve the performance of SQL query in Oracle DB如何提高 Oracle DB 中 SQL 查询的性能
【发布时间】:2019-05-23 17:21:46
【问题描述】:

应用程序中的一个选项卡已损坏(当点击该选项卡时,它会继续旋转并调用特定服务并在一段时间后出现 404 错误)。我们为 Application DB 中的几列创建了索引,看看这是否能提高性能。创建索引并没有太大的区别。

所以我们计划重写 sql 查询以提高性能并修复它。

select distinct 
    editedUser.*
from
    users editedUser,
    relationship_ref editedUserRelationship,
    users approvingUser,
    user_role approvingUserRoles,
    role_permission approvingUserRolePermissions,
    account approvingUserAccount
where
    approvingUser.user_id = 175263
    and approvingUser.user_id = approvingUserRoles.user_id
    and approvingUserRoles.role_id = approvingUserRolePermissions.role_id
    and approvingUserRoles.user_role_status_id = 2
    and editedUserRelationship.relationship_id = 
        editedUser.submitted_relationship_id
    and (approvingUser.account_id = approvingUserAccount.account_id
         or approvingUser.account_id is null)
    and editedUser.review_status = 'R'
    and approvingUserRolePermissions.permission_id = 
        editedUserRelationship.view_pending_permission_id;

这需要将近 6 分钟。所以请有人建议如何在此查询中使用正确的联接。它有 36 列和 30,000 条记录。

【问题讨论】:

  • 是什么让您认为问题出在连接上?
  • 如果我使用左连接或右连接而不是交叉连接。它可能会提高性能
  • 真的不会。

标签: sql database oracle performance query-optimization


【解决方案1】:

以更易于阅读的风格重新排列(至少对我而言),我明白了:

select distinct ed.*
from   users ap
       join user_role ro
            on  ro.user_id = ap.user_id
       join account ac
            on  ac.account_id = ap.account_id or ap.account_id is null
       join role_permission rp
            on  rp.role_id = ro.role_id
       join relationship_ref re
            on  re.view_pending_permission_id = rp.permission_id
       join users ed
            on  ed.submitted_relationship_id = re.relationship_id
where  au.user_id = 175263
and    ro.user_role_status_id = 2
and    ed.review_status = 'R'

有多少批准用户的account_id 为空?对于其中任何一个,您都可以检索系统中的所有帐户。这真的是业务需求吗?我不确定这是否有意义。该查询不会进一步使用该表,因此也许您可以完全删除 account 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2012-03-29
    • 2012-01-28
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多