簡體   English   中英

如何提高Oracle DB中SQL查詢的性能

[英]How to improve the performance of SQL query in Oracle DB

應用程序中的選項卡之一已損壞(當點擊該選項卡時,它會繼續旋轉並調用特定服務並在一段時間后收到 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 條記錄。

以更易於閱讀的風格重新排列(至少對我而言),我明白了:

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聯接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM