我想创建一个视图,我将需要一个自我加入的查询。我很担心它的性能和行为,因为它将获取大量数据。表和查询的详细信息如下(原始表有更多列,我将需要多列的结果;这只是为了向您展示一个示例): -
人员表
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
我需要查询已婚人士的数据并与他们一起使用spouse_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'
请告知我有关其优化的信息,如果您认为重组查询会获得更好的结果,或者在查询等方面不建议自行加入。
我希望得到一个优化视图的回复。
答案 0 :(得分:-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'
您可以做的另一个优化是在spouse_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'