为什么我在 Sybase 数据库中的查询花费太多时间?
Why does my Query in Sybase database take too much time?
我的查询执行时间大约需要 27 分钟。我真的不知道为什么要花这么长时间。特别是我有一个具有相同输出的其他查询,但这个只需要 1.4 秒。
我想知道这两个查询之间的平均区别是什么,以及为什么第一个查询需要这么长时间才能执行。
第一个,大约需要 27 分钟:
select ATTACHMENT_ID from PES_ESB_ATTACHMENT where ATTACHMENT_ID in(
select distinct ATTACHMENT_ID from PES_ESB_ATTACHMENT A
left outer join PES_ESB_SHIFTDOCUMENTATION SD on A.MOMENT=SD.ATTACHMENT_MOMENT
left outer join PES_ESB_SHIFTTASK T on A.MOMENT=T.ATTACHMENT_MOMENT
where
SD.ATTACHMENT_MOMENT is null
and
T.ATTACHMENT_MOMENT is null
And ( 163697831 - A.MOMENT ) > 86400
)
第二个 1.4 秒:
select ATTACHMENT_ID from PES_ESB_ATTACHMENT where ATTACHMENT_ID in(
select ATTACHMENT_ID from (
select distinct ATTACHMENT_ID, A.MOMENT
from PES_ESB_ATTACHMENT A
left outer join PES_ESB_SHIFTDOCUMENTATION SD on A.MOMENT=SD.ATTACHMENT_MOMENT
left outer join PES_ESB_SHIFTTASK T on A.MOMENT=T.ATTACHMENT_MOMENT
where
SD.ATTACHMENT_MOMENT is null
and
T.ATTACHMENT_MOMENT is null
)tbl1
)
and
( 163697831 - MOMENT ) > 86400
怎么会有这么大的差距?
简单。
在第二个查询中,优化器在 PES_ESB_ATTACHMENT.
查询的最外层有一个额外的过滤器可用
and
( 163697831 - MOMENT ) > 86400
看起来这是在长查询的相关查询中。
这显然允许服务器通过相关子查询减少它必须 运行 的记录。
我建议您查看查询计划,它们看起来会有很大不同。
我的查询执行时间大约需要 27 分钟。我真的不知道为什么要花这么长时间。特别是我有一个具有相同输出的其他查询,但这个只需要 1.4 秒。 我想知道这两个查询之间的平均区别是什么,以及为什么第一个查询需要这么长时间才能执行。
第一个,大约需要 27 分钟:
select ATTACHMENT_ID from PES_ESB_ATTACHMENT where ATTACHMENT_ID in(
select distinct ATTACHMENT_ID from PES_ESB_ATTACHMENT A
left outer join PES_ESB_SHIFTDOCUMENTATION SD on A.MOMENT=SD.ATTACHMENT_MOMENT
left outer join PES_ESB_SHIFTTASK T on A.MOMENT=T.ATTACHMENT_MOMENT
where
SD.ATTACHMENT_MOMENT is null
and
T.ATTACHMENT_MOMENT is null
And ( 163697831 - A.MOMENT ) > 86400
)
第二个 1.4 秒:
select ATTACHMENT_ID from PES_ESB_ATTACHMENT where ATTACHMENT_ID in(
select ATTACHMENT_ID from (
select distinct ATTACHMENT_ID, A.MOMENT
from PES_ESB_ATTACHMENT A
left outer join PES_ESB_SHIFTDOCUMENTATION SD on A.MOMENT=SD.ATTACHMENT_MOMENT
left outer join PES_ESB_SHIFTTASK T on A.MOMENT=T.ATTACHMENT_MOMENT
where
SD.ATTACHMENT_MOMENT is null
and
T.ATTACHMENT_MOMENT is null
)tbl1
)
and
( 163697831 - MOMENT ) > 86400
怎么会有这么大的差距?
简单。 在第二个查询中,优化器在 PES_ESB_ATTACHMENT.
查询的最外层有一个额外的过滤器可用and
( 163697831 - MOMENT ) > 86400
看起来这是在长查询的相关查询中。 这显然允许服务器通过相关子查询减少它必须 运行 的记录。
我建议您查看查询计划,它们看起来会有很大不同。