[英]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.