代码之家  ›  专栏  ›  技术社区  ›  Kevin Babcock

帮助优化Oracle查询?

  •  1
  • Kevin Babcock  · 技术社区  · 16 年前

    我有一张关于不同家庭的资料表。我想根据关系类型提取不同的关系。我提出的解决方案使用哈希连接来查询数据库。。。

    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
    );
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   Cade Roux    16 年前

    你知道这相当于这个吗

    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
    );
    

    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
    

    relationship_type_id family_number , person_id 在你的人桌上。

        2
  •  0
  •   MichaelN    16 年前

    为了帮助您进行调整,您可以发布以下信息:

    1) 对于涉及的表,请在表上显示它们的表定义和索引定义。 2) 每个表中大致行数的基本汇总 3) 查询的解释计划。要获得解释计划,请执行以下操作: a) 在sqlplus中运行 b) 在sqlplus中运行

    通过解释计划和表/索引信息,我们可以帮助您更好地优化查询。仅凭这个查询,我们真的没有多少依据。如果您可以提供查询执行的tkprof,那也会有额外的帮助。