Oracle11g oracle中的查询性能问题

Oracle11g oracle中的查询性能问题,oracle11g,oracle10g,Oracle11g,Oracle10g,我需要改进我的查询,它有8个以上的连接,并且占用了大量的表空间 以下是查询: 选择r.id、uc.contributor\u全名、s.code、, d、 文本,ucs.moderation\u状态,v.url 从审查r、用户贡献uc、用户贡献uc状态ucs、, 视频v、描述d、视频描述vd、位置视频lv、, 住宿和视频av系统 其中r.user\u contribution\u id=ucs.user\u contribution\u id uc.id=ucs.user\u贡献\u id和 uc

我需要改进我的查询,它有8个以上的连接,并且占用了大量的表空间

以下是查询:

选择r.id、uc.contributor\u全名、s.code、,
d、 文本,ucs.moderation\u状态,v.url
从审查r、用户贡献uc、用户贡献uc状态ucs、,
视频v、描述d、视频描述vd、位置视频lv、,
住宿和视频av系统
其中r.user\u contribution\u id=ucs.user\u contribution\u id
uc.id=ucs.user\u贡献\u id和
uc.system_id=s.id和
r、 住宿id=平均住宿id或
r、 位置\u id=lv.location\u id和
av.video_id=v.id和
lv.video_id=v.id和
v、 id=vd.video\u id和
vd.description_id=d.id;

有没有更好的方法来编写此查询?

对于这样的查询,Oracle可能会默认使用大量哈希连接和完整表扫描,这可能是个好主意,也可能不是个好主意

+1发布解释计划。在那之前,不要放弃这个答案

我相信您的查询与此等效,并且当您查看解释计划时,您可能会看到Oracle将其转换为以下内容:

select r.id
      ,uc.contributor_full_name,s.code
      ,d.text
      ,ucs.moderation_status
      ,v.url
from   review r
join   user_contribution_status ucs on r.user_contribution_id = ucs.user_contribution_id
join   user_contribution uc on uc.id = ucs.user_contribution_id
join   system s on uc.system_id = s.id
join   accommodation_video av on r.accommodation_id = av.accommodation_id
join   video_description vd on v.id = vd.video_id
join   description d on vd.description_id = d.id
join   video v on av.video_id = v.id
union all
select r.id
      ,uc.contributor_full_name,s.code
      ,d.text
      ,ucs.moderation_status
      ,v.url
from   review r
join   user_contribution_status ucs on r.user_contribution_id = ucs.user_contribution_id
join   user_contribution uc on uc.id = ucs.user_contribution_id
join   system s on uc.system_id = s.id
join   location_video lv on r.location_id = lv.location_id 
join   video_description vd on v.id = vd.video_id
join   description d on vd.description_id = d.id
join   video v on lv.video_id = v.id;

警告:我可能对某些ID列上的约束(例如PK、FK和not null)做了一些假设,特别是关于住宿视频和位置视频。我把它们从子句中删除,假设它们不是必需的,但是这个假设可能是错误的。

中间的代码>或是有点可疑的,似乎有些表在它的两边是不受约束的。重新检查你的逻辑,至少张贴解释计划。请张贴解释计划。谢谢你的回答。我们有两个不同的位置视频和住宿视频表。在审查表中,我们有两个不同的住宿和位置栏。若审查是关于住宿的,位置列将为空,反之亦然。这就是我使用'OR'子句的原因。我想我需要更新关于连接的知识。我会把结果告诉你的。