Наиболее подходящий индекс для короткоживущих столбцов - PullRequest
1 голос
/ 14 мая 2009

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 14 мая 2009

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

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

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

0 голосов
/ 15 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...