Oracle SQL具有多个where条件,速度极慢
我在HibernateSQL查询中发现了一个奇怪的行为。我的查询中有多个and/or语句。如果我将查询拆分为三个不同的查询,那么即使需要进行额外的选择,查询速度也会快得多 但这是什么原因?我该如何解决?我只做了两个select语句,所以我认为问题出在其他地方 我的问题是:Oracle SQL具有多个where条件,速度极慢,sql,oracle,performance,select,Sql,Oracle,Performance,Select,我在HibernateSQL查询中发现了一个奇怪的行为。我的查询中有多个and/or语句。如果我将查询拆分为三个不同的查询,那么即使需要进行额外的选择,查询速度也会快得多 但这是什么原因?我该如何解决?我只做了两个select语句,所以我认为问题出在其他地方 我的问题是: Select * from zdadba.tpartner partner where partner.partnrext in ( select disti
Select * from zdadba.tpartner partner where
partner.partnrext in (
select distinct stapel.fpartnrext from zdadba.tstapel stapel
where stapel.lagernd = 1
and stapel.auftrag_id is null and
(
(
cast(stapel.version as date) <= to_date('30.06.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
) and
(
to_date(sysdate) >= to_date('30.06.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
)
and
(
partner.versandart = 'Halbjaehrlich'
)
)
or
(
(
cast(stapel.version as date) <= to_date('01.01.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
) and
(
to_date(sysdate) <= to_date('30.06.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
)
)
and partner.versandart = 'Halbjaehrlich'
or
(
(
(
cast(stapel.version as date) <= to_date('01.01.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
) and
(
to_date(sysdate) >= to_date('01.01.' || to_char(EXTRACT(YEAR FROM sysdate)), 'DD.MM.YYYY')
)
) and partner.versandart = 'Jaehrlich'
)
);
您正在使用的两种结构往往与响应缓慢有关。一种是使用子查询作为in运算符的目标。另一个是OR运算符 您通常可以将与子查询一起使用的查询重写为具有联接的等效查询。结果往往更快。对不起,在这种情况下我懒得帮你 您可能别无选择,只能使用OR运算符。有时,您可以想出一种替代方法,使用UNION组合结果集,但这种方法通常运行缓慢
祝你好运 你的第二个或第二个条件。。。看起来您不小心遗漏了and partner.versandart,这将是其他模式的逻辑缺陷。另外,对于所有的日期转换,您实际上想做什么,因为有些是>=另一些您在Statel表中有多少记录?这个表中的索引是什么?你的索引类型是什么?您使用了太多的日期转换、比较和提取,每一项都会影响查询的整体性能