【发布时间】:2016-10-31 00:57:05
【问题描述】:
我们正在使用一个 PL/SQL 表(名为 pTable)来收集一些要更新的 id。
然而,声明
UPDATE aTable
SET aColumn = 1
WHERE id IN (SELECT COLUMN_VALUE
FROM TABLE (pTable));
需要很长时间才能执行。
似乎优化器提出了一个非常糟糕的执行计划,它决定对 aTable 使用全表扫描,而不是使用在 id 上定义的索引(作为主键)。 pTable 通常包含很少的值(大多数情况下只有一个)。
我们可以做些什么来加快速度?我们想出的最好方法是将低 pTable.Count(1 和 2)作为特殊情况处理,但这肯定不是很优雅。
感谢所有伟大的建议。我在我的博客http://smartercoding.blogspot.com/2010/01/performance-issues-using-plsql-tables.html 中写过这个问题。
【问题讨论】:
-
你在这里忘记了一些东西我认为声明在哪里
-
是的,抱歉,我按了返回,并且已经发布了问题。
-
一个表有多少行? aTable 上还有其他索引吗?
-
aTable 目前大约有 175.000 行。还有其他索引,但在这种情况下它们不可用。
-
大家的好建议。感谢您的提示!我的发言速度更快,也学到了很多东西!