sql - 如何提高 Oracle DB 中 SQL 查询的性能
问题描述
应用程序中的一个选项卡已损坏(当点击该选项卡时,它会继续旋转并调用特定服务并在一段时间后出现 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'
有多少批准用户有 null account_id
?对于其中任何一个,您都可以检索系统中的所有帐户。这真的是业务需求吗?我不确定这是否有意义。该查询不会进一步使用该表,因此也许您可以account
完全删除连接。
推荐阅读
- node.js - Sequelize 计算字段 - VIRTUAL
- c# - Task.Delay 应该等待完全延迟吗?
- nginx - nginx-prometheus-exporter 部署失败
- python - 变量没有在不同的函数中定义
- bokeh - 如何在 Bokeh Div 中显示绘图?
- javascript - In the textbox if user enters minus sign in between or anywhere except for first position, it should jump back to front
- c++ - 如何初始化嵌套类中的成员?C++
- python - 是否可以在 Pytorch 中不使用填充的情况下对动态长度句子进行最大池化?
- python - Is my code not working because i'm using an online IDE or is there an error?
- perl - 如何修复perl中的“没有这样的文件或目录”错误?