SQL Server: кластерный индекс в datetime, ASC или DESC
Если у меня есть таблица SQL Server с кластеризованным индексом в поле datetime, то перед вставками устанавливается значение DateTime.Now(из С#), должен ли индекс возрастать или нисходить, чтобы избежать реорганизации таблицы?
Спасибо.
Ответ 1
Не имеет значения - но действительно ли DateTime будет уникальным? Я бы выбрал кластерный индекс только для DateTime - вместо этого я использовал бы идентификатор INT IDENTITY или BIGINT IDENTITY и поместил бы обычный некластеризованный индекс в DateTime (так как это действительно не гарантировалось быть уникальным......)
Марк
PS: Как первичный ключ, общий консенсус относительно того, какой кластеризованный ключ должен быть:
уникальный (иначе SQL Server будет "идентифицировать" его, добавив к нему 4-байтовый идентификатор)
как узкий насколько возможно
static (никогда не меняются)
увеличение
Столбец (столбцы), составляющие кластеризованный ключ (включая этот 4-байтовый идентификатор), добавляются в КАЖДЫЙ ВХОД В КАЖДОМ некластеризованном индексе - поэтому вы хотите, чтобы они были как можно более тонкими.
PS 2: кластерный ключ (ключи) добавляются к каждому некластеризованному индексу, потому что тот способ, которым SQL Server будет извлекать целые строки, когда он найдет значение поиска в некластеризованном индексе. Это строка "location" в базе данных, так сказать. Поэтому он должен быть уникальным и узким.