我正在使用oracle sql。我有一个查询:如何提高sql查询的性能?
QUERY1
select t1.object_id object1, t2.object_id ... --etc--
from objects t1, objects t2, object_types t3 ... --etc--
where ... --many conditions--
它的实际工作。现在我必须选择t1.object1的n级父项。
它我查询此:
QUERY2:
select object_id
from objects
where object_type_id in
(--query3--)
and rownum = 1
connect by prior parent_id = object_id
start with object_id= -- t1.object_id value --;
它的工作原理也一样,如果我手动编写t1.object_id值。问题是,如果我编写一些数字而不是query3,它的运行速度将快100倍。 IMO发生,因为查询每次执行每个对象。
现在我需要做出一个性能良好的大查询。我该怎么做?
首先,我需要提高query2的性能。我希望query3不要执行很多次。我可以将它bulk collect
它变成一些变量,但我想尽可能多地使用pl/sql。所以我想用 - 作为语法。
with types as (--query3--)
select object_id
from objects
where object_type_id in
(types)
and rownum = 1
connect by prior parent_id = object_id
start with object_id= -- t1.object_id value --;
此查询的输出是exeption。 我该如何尽可能快地做到这一点?
如何选择查询1中的父类型?我必须在where子句中编写分层查询吗?
运行查询时出现异常? –