-1

我想创建一个视图,我将需要一个包含自连接的查询。我担心它的性能和行为,因为它将获取大量数据。表和查询的详细信息如下(原始表有更多列,我将需要来自多个列的结果;这只是为您提供一个示例):-
人表

PK NAME       SPOUSE_REF_ID   IS_MARRIED
1  John          Null             Y
2  Alice          1               Y
3  Varvatos      Null             Y
4  Barbara        5               Y
5  Stanely       Null             Y
6  Ross          Null             N
7  Henry         Null             N

我需要查询那些已婚并有配偶ref_id的人的数据。因此,我提出的查询是:-

select a.NAME spouse_name, a.SERVICE_NO, a.id,a.employment_category_id, pf.name name, pf.service_no,pf.id,
  pf.employment_category_id
  from person a
 inner join person pf on
  a.id = pf.spouse_ref_id
  where a.IS_MARRIED ='Y'

请就其优化向我提出建议,如果您认为重组查询将获得更好的结果或在查询等中不建议使用自联接等。
我将不胜感激具有优化视图的回复。

4

1 回答 1

-2

当您查询视图时,在后台执行用于构造视图的查询,然后将适当的数据返回给您。

有时,我注意到使用带有连接的 where 子句会获取意想不到的结果。因此,我建议您将原始查询修改为以下内容:-

select a.NAME spouse_name, a.SERVICE_NO, a.id,a.employment_category_id, pf.name name, pf.service_no,pf.id,
  pf.employment_category_id
  from person a
 inner join person pf on
  a.id = pf.spouse_ref_id
  and a.IS_MARRIED ='Y'

您可以做的另一个优化是在配偶_ref_id 上创建一个(唯一索引)/(索引)。这将确保当您进行自连接时,不会对两个实例进行全表扫描。我不确定以下查询是否会产生更好的结果或您想要的结果(但值得一试):-

select a.NAME spouse_name, a.SERVICE_NO, a.id,a.employment_category_id, pf.name name, pf.service_no,pf.id,
      pf.employment_category_id
      from person a
     inner join person pf on
      a.id = pf.spouse_ref_id
      and a.IS_MARRIED ='Y'
      and pf.IS_MARRIED='Y'
于 2013-03-15T03:15:04.950 回答