Мы используем таблицу PL / SQL (с именем pTable) для сбора количества идентификаторов, которые необходимо обновить.
Однако утверждение
UPDATE aTable
SET aColumn = 1
WHERE id IN (SELECT COLUMN_VALUE
FROM TABLE (pTable));
занимает много времени.
Кажется, что оптимизатор предлагает очень плохой план выполнения, вместо того чтобы использовать индекс, определенный для id (в качестве первичного ключа), он решает использовать полное сканирование таблицы в aTable. pTable обычно содержит очень мало значений (в большинстве случаев только одно).
Что мы можем сделать, чтобы сделать это быстрее? Лучшее, что мы придумали, - это обрабатывать низкий pTable.Count (1 и 2) как особые случаи, но это, конечно, не очень элегантно.
Спасибо за все замечательные предложения. Я написал об этой проблеме в своем блоге на http://smartercoding.blogspot.com/2010/01/performance-issues-using-plsql-tables.html.