2009-05-14 2 views
1

В моем текущем проекте некоторые таблицы имеют столбец с именем «изменено», который указывает, была ли изменена текущая строка с момента последней проверки. Все инструкции вставки и обновления включают этот столбец.Наиболее подходящий индекс для короткоживущих столбцов

Каждый час я запускаю запланированную задачу, которая запрашивает все измененные строки, делает некоторые вещи с этими строками, а затем устанавливает null в столбец «изменен».

Это потенциально проблема с производительностью, так как я собираюсь выполнять операции записи и чтения в этом столбце, индекс будет постоянно перестраиваться.

Каков наилучший вариант для этого сценария (вместо того, чтобы не использовать этот механизм)?

ответ

3

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

Если ваши таблицы маленькие, столбец может быть плохой идеей, но вы можете увидеть блокировку/блокировку, если у вас есть множество выборок и обновлений в этих таблицах, и если запланированные циклы обработки или медленные.

Если вы идете с колонкой, возможно, лучше иметь столбец LastChgDate, тогда вы просто обрабатываете все строки в пределах диапазона (вам нужно будет отслеживать диапазон для обработки каждый раз), но вы не будете необходимо изменить LastChgDate, чтобы показать, что это «сделано». Это может быть спорным, если ваш запланированный процесс обновляет фактическую строку, но вы не говорите.

+0

Awnsome ... Спасибо за идеи ... Я думаю, что попробую подход с меткой времени. – razenha

0

Поскольку столбец, вероятно, имеет только два значения (нуль и 1 для изменений), индекс, вероятно, бесполезен в любом случае.

+0

На самом деле это имеет 5 возможных значений ... NULL, INSERT, UPDATE и DELETE. Удалить «логическое» удаление :) – razenha

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