Добавление первичного ключа и изменение столбца в DatetTime2

У меня есть таблица, которая отслеживает статусы, которые проходит определенный файл, когда он проверяется нашей системой. Это выглядит так:
FileID int
Статус tinyint
TouchedBy varchar (50)
Прикоснулся, когда дата и время

В настоящее время в этой таблице НЕТ первичного ключа, однако есть кластеризованный индекс в состояниях и касаниях, когда

Поскольку таблица продолжает расти, а производительность при выполнении запросов к ней снижается, у меня возникла мысль о том, чтобы добавить PrimaryKey, чтобы избавиться от поисков в куче - первичный ключ для FileID, Status и TouchedWhen.

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

Итак, я начал исследовать, что нужно для преобразования этого в datetime2(7) и изменить те, которые дублируются в то время. Моя таблица будет выглядеть так:
FileID int
Статус tinyint
TouchedBy varchar (50)
Прикоснулся, когда datetime2(7)

И первичный ключ на FileID, Status и TouchedWhen

Мой вопрос заключается в следующем: каков наилучший способ пройти и добавить миллисекунду к существующим таблицам, если есть дубликаты? Как я могу сделать это за столом, который должен оставаться в сети?

Заранее спасибо,
казарка

1 ответ

Решение

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

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

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

Другие вопросы по тегам