【发布时间】:2013-05-21 11:10:50
【问题描述】:
有没有可能在 PL/SQL 中提高这个查询的性能?
SELECT * FROM events
WHERE EXTRACTVALUE(xmltype(body),'/Event/Description/Status') = 'Cancelled'
当EXTRACTVALUE在WHERE子句中时,整个查询执行15秒,肯定太长了。
当EXTRACTVALUE在这样的select语句中使用时
SELECT EXTRACTVALUE(xmltype(body),'/Event/Description/Status') FROM events
只需要 0.5 秒。
body 列是 CLOB 类型。
【问题讨论】:
-
第一个查询可能在选择列表中包含 CLOB,而第二个查询只有一个列可供选择。如果将星号替换为“EXTRACTVALUE(xmltype(body),'/Event/Description/Status')”(如在第二个查询中),第一个查询需要多长时间?你的 CLOB 有多大?
-
如果我按照你说的那样替换它,结果是一样的(甚至更长一点)。我的 CLOB 很不一样,有的有 600 行,有的有 10000 行,但是选择
Status值很快,所以我没想到按那个过滤会增加执行时间。
标签: sql xml performance oracle plsql