【发布时间】:2018-02-06 15:57:48
【问题描述】:
我有一些我认为很奇怪的问题。通常,我认为如果我施加限制,查询应该持续更少的时间(以便处理更少的行)。但我不知道为什么,事实并非如此。也许我说错了,但我没有出错;查询似乎运行“直到无穷大”。
这是查询
SELECT
A.ENTITYID AS ORG_ID,
A.ID_VALUE AS LEI,
A.MODIFIED_BY,
A.AUDITDATETIME AS LAST_DATE_MOD
FROM (
SELECT
CASE WHEN IFE.NEWVALUE IS NOT NULL
then EXTRACTVALUE(xmltype(IFE.NEWVALUE), '/DocumentElement/ORG_IDENTIFIERS/ID_TYPE')
ELSE NULL
end as ID_TYPE,
case when IFE.NEWVALUE is not null
then EXTRACTVALUE(xmltype(IFE.NEWVALUE), '/DocumentElement/ORG_IDENTIFIERS/ID_VALUE')
ELSE NULL
END AS ID_VALUE,
(select u.username from admin.users u where u.userid = ife.analystuserid) as Modified_by,
ife.*
FROM ife.audittrail ife
WHERE
--IFE.AUDITDATETIME >= '01-JUN-2016' AND
attributeid = 499
AND ROWNUM <= 10000
AND (CASE WHEN IFE.NEWVALUE IS NOT NULL then EXTRACTVALUE(xmltype(IFE.NEWVALUE), '/DocumentElement/ORG_IDENTIFIERS/ID_TYPE') ELSE NULL end) = '38') A
--WHERE A.AUDITDATETIME >= '01-JUN-2016';
所以我尝试使用注释的两个子句(当然每次一个)。 两者都发生了同样的情况;查询运行了很长时间,我不得不中止它。
您知道为什么会发生这种情况吗?我该怎么做,也许以不同的方式来设置限制?
例如,字段 AUDITDATETIME 的值是“06-MAY-2017”。采用那种格式。
非常感谢您
【问题讨论】:
-
有时更多的限制意味着更多的表扫描,或者更多的连接,这很耗时。
-
必须在列上应用
index,以便在更短的时间内获得结果 -
更不用说 EXTRACTVALUE 在性能方面是昂贵的。
-
想必它不会很快找到符合条件的10,000行。
标签: sql oracle constraints where restriction