性能缓慢
问题描述:
嗨,
我已要求查询的性能,我试图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
感谢您 问候 珍妮
答
不需要的权限的相关子查询。需要任何其他问题,通过检查联接字段索引的索引(如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
答
尝试删除子查询,像这样:
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
此查询中使用的各种表的索引是什么? – 2011-03-03 06:16:45