Производительность графика времени в Sql Server - PullRequest
0 голосов
/ 29 октября 2008

У меня есть таблица с тремя столбцами:

пользователь varchar, статус varchar, rep int

статус и репутация часто обновляются, и одно из требований:

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

Я могу добавить в таблицу столбец updated_at datetime и вставить новые строки с тем же пользователем вместо обновления существующих, но таблица становится большой, и мне нужно объединить результаты запроса с аналогичными результатами из других таблиц, поэтому мне нужно быстрый запрос.

Как лучше всего решить эту проблему в SQL Server?

Ответы [ 3 ]

1 голос
/ 29 октября 2008

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

Это было бы лучше, если бы вы действительно выбирали только определенные дни / пользователей / статусы из истории

0 голосов
/ 29 октября 2008

Один из вариантов для этого - использовать две отдельные таблицы: таблицу «текущих значений» и таблицу истории. Таблица текущих значений будет содержать только самые последние значения для каждого пользователя, что сделает ее небольшой и легко присоединяемой. Таблица истории будет содержать три перечисленных вами столбца, а также столбец отметки времени, и будет отслеживать изменения значений с течением времени. В любое время, когда вы хотите изменить значение в таблице текущих значений, вы одновременно добавляете строку с новыми значениями в таблицу истории, используя gettime () в качестве метки времени.

0 голосов
/ 29 октября 2008

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

Между прочим, пока вы делаете это, вы можете подумать, хотите ли вы записать, кто также внес изменения. Тогда вы в основном создали решение для аудита.

...