我有这个查询(在 oracle 中)需要很长时间(在 15-30 秒之间)(query1):
SELECT numcen
FROM centros
WHERE TO_NUMBER (centros.numcen) = TO_NUMBER (?)
OR TO_NUMBER (centros.numcen) IN (
SELECT TO_NUMBER (dc.centro)
FROM datos_centro dc, centros c
WHERE TO_NUMBER (c.numcen) = TO_NUMBER (dc.centro)
AND TO_NUMBER (dc.centro_superior) = TO_NUMBER (?));
我不知道为什么,因为这是一个非常简单的查询。我以为是因为里面的子查询IN
,但是如果我运行这样的子查询(query2):
SELECT TO_NUMBER (dc.centro)
FROM datos_centro dc, centros c
WHERE TO_NUMBER (c.numcen) = TO_NUMBER (dc.centro)
AND TO_NUMBER (dc.centro_superior) = TO_NUMBER (?)
只需 100-200 毫秒。更重要的是,如果我运行query2并将其结果放入IN
query1替换子查询中,结果是立即的。
我无法运行解释计划,因为我没有权利。TO_NUMBER
如果我在 mysql 下运行(替换为CAST
),情况会更糟。需要超过2分钟,这是不可接受的。
那么,有没有办法改进第一个查询(query1)?我应该分成两部分吗?如果我替换OR
为UNION
(更快),它会是相同的查询吗?
任何建议都将受到欢迎。谢谢和对不起我的英语。