SQL Server: столбец даты индексации в таблице журнала - PullRequest
3 голосов
/ 06 октября 2009

Пример таблицы:

CREATE TABLE Log (
    logID    int identity
    logDate  datetime
    logText  varchar(42)
)

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

Имеет ли смысл помещать дополнительный некластеризованный индекс в logDate, принимая во внимание, что для таблицы Log важно иметь быструю запись.

Ответы [ 3 ]

7 голосов
/ 06 октября 2009

Создайте кластерный индекс logDate, logID (в таком порядке). Поскольку дата и время «растут», это не должно стоить ничего лишнего. logID избавляет вас от одновременной вставки двух записей журнала (может произойти)

3 голосов
/ 06 октября 2009

Если у вас будет много запросов с

WHILE LogDate > ......

(или что-то подобное) предложение - да, конечно!

Кластерный индекс в LogID не поможет, если вы выбираете по дате - поэтому, если это обычная операция, некластеризованный индекс по дате, безусловно, очень поможет.

Марк

0 голосов
/ 06 октября 2009

Артур не сомневается в том, что рассматривает кластеризованный индекс в logdate, logid, поскольку вы можете случайно встретить дубликаты в окне точности даты и времени (3,33 мс в SQL 2005).

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

...