【发布时间】:2017-02-16 22:01:44
【问题描述】:
我正在尝试使用业务对象前端从另一个开发人员的代码中交叉处理一些代码值(我知道,它不是最理想的,但他们没有给我后端访问权限)。
我需要做的只是从相关表中提取一条记录来比较代码值以显示值。我猜这个问题与包含数百万条记录的表有关。即使我将查询范围缩小到一个值,仅尝试从今天开始的记录,并将检索到的最大行数设置为 1,它也会永远挂起。
它为我的查询生成的代码是:
SELECT
CLINICAL_EVENT.EVENT_CD,
CV_EVENT.DISPLAY
FROM
CLINICAL_EVENT,
CODE_VALUE CV_EVENT
WHERE
( CLINICAL_EVENT.EVENT_CD=CV_EVENT.CODE_VALUE )
AND
(
CLINICAL_EVENT.EVENT_CD = 338743225
AND
CLINICAL_EVENT.EVENT_END_DT_TM
> '16-02-2017 00:00:00'
)
【问题讨论】:
-
您在运行该查询时是否有任何表锁定?
-
代码值和相应的显示值实际上都来自表
CODE_VALUE。您从连接中获得的唯一好处是根据代码值出现在满足日期标准的CLINICAL_EVENT行上的次数来复制这些结果。为什么不直接从CODE_VALUE中选择想要的记录,并从查询中完全消除表CLINICAL_EVENT? -
联接本身也可能会减少数据。因此,也许一个表中的记录而不是另一个表中的记录需要从结果中排除;因此加入的原因就在那里。 (虽然可以处理虽然存在可能更快)
-
在 BO 世界中,这两个对象实际上是物理表还是派生表具有自己的开销?
-
@JohnBollinger 按照您的建议删除
CLINICAL_EVENT表就可以了。如果您想将其添加为答案,我会将其设为已接受的答案:-)
标签: sql business-objects