Я хочу удалить определенное количество устаревших строк из таблицы в Derby. Что-то вроде этого:Как удалить ограниченное количество строк в Apache Derby
DELETE FROM table WHERE obsolete = 1 LIMIT 100000;
Но Derby не поддерживает нестандартный синтаксис LIMIT. К сожалению, обычная замена не работает либо:
DELETE FROM table WHERE obsolete = 1 FETCH FIRST 100000 ROWS ONLY;
Хотя следующие в конечном итоге работает, производительность ужасно:
DELETE FROM table WHERE id IN
(SELECT id FROM table WHERE obsolete = 1 FETCH FIRST 100000 ROWS ONLY);
И итерация по ResultSet вызывающего .deleteRow() несколько раз завершается после посещения еще несколько чем 64K строк, без указания на то, что что-то пошло не так, курсор просто прекращает возвращать строки, как будто их не осталось.
Есть ли лучший способ удалить большое количество, но не всех, строк в таблице?
Есть ли какие-либо ключи, такие как временные метки, которые можно использовать для фильтрации удаления? –
Я попытался отфильтровать удаление с помощью столбца даты, но я не могу предсказать, сколько строк связано с каким-либо конкретным Я не пытаюсь удалить слишком много строк сразу. – Andrew