2014-04-09 3 views
0

Каким будет наиболее эффективный способ выбора только строк из таблицы DB2, которые вставлены/обновлены с момента последнего выбора (или определенного времени)? В таблице нет поля, которое позволит нам сделать это легко. Мы извлекаем данные из таблицы для целей отчетности, и теперь нам приходится извлекать всю таблицу каждый раз, что вызывает большие проблемы с производительностью. я нашел пример о том, как выбрать только те строки, изменились в последний день:Инкрементное извлечение из DB2

SELECT * FROM ORDERS 
    WHERE ROW CHANGE TIMESTAMP FOR ORDERS > 
    CURRENT TIMESTAMP - 24 HOURS; 

Но я не уверен, насколько эффективно это будет, так как таблица огромна. Есть ли другой способ выбрать только те строки, которые были изменены, что может быть более эффективным, чем это?

Я также нашел решение под названием ParStream. Это похоже на то, что может ускорить выполнение запросов по данным, но мне не удалось найти какую-либо полезную документацию.

+0

Чтобы использовать этот метод, вам понадобится столбец, содержащий ROW CHANGE TIMESTAMP в таблице. Обратите внимание, что такой столбец должен быть легко добавлен, поскольку столбец ROW CHANGE TIMESTAMP скрыт по умолчанию. A select * from tbl НЕ возвращает его. См. Синтаксис CREATE TABLE в информационном центре. – Charles

ответ

0

Я предлагаю следующие варианты:

  • Вы можете использовать Изменить Захват данных, и это будет воспроизведено автоматически модификации к другому источнику данных.
  • Обычно оператор выбора не гарантирует порядок строк. Это означает, что вы не можете использовать выбор без ссылки времени, чтобы получить последнее. Таким образом, у вас должен быть столбец времени, чтобы получить последнее. Вы можете отслеживать самую последнюю строку в глобальной переменной, а в следующий раз извлекать строки со временем, большим, чем эта переменная. Если вы хотите увеличить производительность, вы можете поместить таблицу в режим добавления, и таким образом новые строки будут физически вместе. Сохранение индекса в этом столбце времени может быть дорогостоящим для поддержания, но оно будет ускорять (без сканирования таблицы), когда вам нужно извлечь строки.
+0

Спасибо! Я не знал о возможностях изменения данных. – Mirjana011

0

Если ваш сервер DB2 for i, используйте журнал ведения базы данных. Вы можете извлекать после изображений вставленных записей по периоду времени или номер записи журнала из приемника (ов) журнала. Затем записи данных могут быть скопированы в ваш целевой файл.

Смежные вопросы