Kev*_*ock 1 oracle optimization
我试图从这个Oracle查询中获得更好的性能(这非常慢).我是Oracle初学者,所以也许有人可以指出一种更好的方法来处理这个问题.
我有一张表格,里面有关于不同家庭的信息.我想根据关系类型提取不同的关系.我想出的解决方案使用散列连接来查询数据库...
select *
from (
with target_person as (
select
p.person_id,
p.family_number,
p.relationship_type_id
from
people p
where
p.relationship_type_id = 1 -- parent
)
select
target_person.person_id,
related_person.related_person_id,
related_person.relationship_type_id
from
target_person,
people related_person
where
target_person.person_id != related_person.person_id
and target_person.family_number = related_person.family_number
and related_person.relationship_type_id = 1
);
Run Code Online (Sandbox Code Playgroud)
你意识到这相当于这个?:
select *
from (
with target_person as (
select
p.person_id,
p.family_number,
p.relationship_type_id
from
people p
where
p.relationship_type_id = 1 -- parent
)
select
target_person.person_id,
related_person.related_person_id,
related_person.relationship_type_id
from
target_person,
target_person related_person
where
target_person.person_id != related_person.person_id
and target_person.family_number = related_person.family_number
);
Run Code Online (Sandbox Code Playgroud)
所以它真的很简单:
SELECT *
FROM people AS l
INNER JOIN people AS r
ON l.family_number = r.family_number
AND l.relationship_type_id = 1
AND r.relationship_type_id = 1
AND l.person_id <> r.person_id
Run Code Online (Sandbox Code Playgroud)
我想的办法让这个去最快的是有一个索引relationship_type_id,family_number,person_id你的百姓餐桌.
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |