2011-03-03 107 views
0

可能重复:
Slow Performance of Sql Query性能缓慢

嗨,

我已要求查询的性能,我试图simplyfy它。但是它仍然没有工作。我在下面添加我的查询。请问你能更有效地简化它吗

select 
    r.parent_itemid f_id, 
    parent_item.name f_name, 
    parent_item.typeid f_typeid, 
    parent_item.ownerid f_ownerid, 
    parent_item.created f_created, 
    parent_item.modifiedby f_modifiedby, 
    parent_item.modified f_modified, 
    pt.name f_tname, 
    child_item.id i_id, 
    t.name i_tname, 
    child_item.typeid i_typeid, 
    child_item.name i_name, 
    child_item.ownerid i_ownerid, 
    child_item.created i_created, 
    child_item.modifiedby i_modifiedby, 
    child_item.modified i_modified, 
    r.ordinal i_ordinal 
from 
    item child_item, 
    type t, 
    relation r, 
    item parent_item, 
    type pt 
where 
    r.child_itemid = child_item.id and 
    t.id=child_item.typeid and 
    parent_item.id = r.parent_itemid and 
    pt.id = parent_item.typeid 
    and parent_item.id in (
     select 
      itemid 
     from 
      permission 
     where 
      itemid=parent_item.id and 
      (holder_itemid in (10,100) and level > 0)) 
order by 
    r.parent_itemid, 
    r.relation_typeid, 
    r.ordinal 

感谢您 问候 珍妮

+1

此查询中使用的各种表的索引是什么? – 2011-03-03 06:16:45

回答

1

不需要的权限的相关子查询。需要任何其他问题,通过检查联接字段索引的索引(如item.child_itemid)&过滤领域(如permission.holder_itemid)固定将帮助您查询的性能

  select 
       r.parent_itemid f_id, 
       parent_item.name f_name, 
       parent_item.typeid f_typeid, 
       parent_item.ownerid f_ownerid, 
       parent_item.created f_created, 
       parent_item.modifiedby f_modifiedby, 
       parent_item.modified f_modified, 
       pt.name f_tname, 
       child_item.id i_id, 
       t.name i_tname, 
       child_item.typeid i_typeid, 
       child_item.name i_name, 
       child_item.ownerid i_ownerid, 
       child_item.created i_created, 
       child_item.modifiedby i_modifiedby, 
       child_item.modified i_modified, 
       r.ordinal i_ordinal 
      from 
       item child_item, 
       type t, 
       relation r, 
       item parent_item, 
       type pt, 
       permission p 
      where 
       r.child_itemid = child_item.id 
       and t.id=child_item.typeid 
       and parent_item.id = r.parent_itemid 
       and pt.id = parent_item.typeid 
       and parent_item.id = p.itemid 
       and p.holder_itemid in (10, 100) 
       and p.level > 0 
      order by 
       r.parent_itemid, 
       r.relation_typeid, 
       r.ordinal 
0

尝试删除子查询,像这样:

select 
        r.parent_itemid f_id, 
        parent_item.name f_name, 
        parent_item.typeid f_typeid, 
        parent_item.ownerid f_ownerid, 
        parent_item.created f_created, 
        parent_item.modifiedby f_modifiedby, 
        parent_item.modified f_modified, 
        pt.name f_tname, 
        child_item.id i_id, 
        t.name i_tname, 
        child_item.typeid i_typeid, 
        child_item.name i_name, 
        child_item.ownerid i_ownerid, 
        child_item.created i_created, 
        child_item.modifiedby i_modifiedby, 
        child_item.modified i_modified, 
        r.ordinal i_ordinal 
       from 
        item child_item, 
        type t, 
        relation r, 
        item parent_item, 
        type pt, 
        permission perm /* <<< added this line <<< */ 
       where 
        r.child_itemid = child_item.id and 
        t.id=child_item.typeid and 
        parent_item.id = r.parent_itemid and 
        pt.id = parent_item.typeid 

        and parent_item.id = perm.itemid /* <<< modified this line <<< */ 
        and perm.itemid = parent_item.id /* <<< copied these 2 lines from the subquery <<< */ 
        and (perm.holder_itemid in (10,100) and perm.level > 0)) /* <<< */ 

       order by 
        r.parent_itemid, 
        r.relation_typeid, 
        r.ordinal 

试试看,看它是否有效,并有所作为。

+0

我尝试了更新后的查询,但它不起作用4我。 – user642378 2011-03-03 08:56:32

+0

@ user642378它是否超时,给出错误的结果还是有语法错误? – Trinidad 2011-03-03 12:18:00