SQL Server: кластерный индекс для даты и времени, ASC или DESC - PullRequest
19 голосов
/ 25 июня 2009

Если у меня есть таблица SQL Server с кластеризованным индексом в поле даты и времени, для которого перед вставкой установлено значение DateTime.Now (из C #), должен ли индекс увеличиваться или уменьшаться, чтобы избежать реорганизации таблицы?

Спасибо.

Ответы [ 2 ]

28 голосов
/ 25 июня 2009

Не имеет значения, но действительно ли DateTime действительно уникален? Я бы избежал размещения кластеризованного индекса только для DateTime - я бы вместо этого использовал INT IDENTITY или BIGINT IDENTITY и поместил бы обычный некластеризованный индекс в DateTime (поскольку это действительно не гарантировано, чтобы быть уникальным ......)

Марк

PS: Как и первичный ключ, общее мнение о том, каким должен быть кластеризованный ключ:

  • уникально (в противном случае SQL Server «унифицирует» его, добавив в него 4-байтовый уникализатор)
  • как узкий как возможный
  • статический (никогда не меняется)
  • всегда увеличивается

Столбцы, составляющие кластеризованный ключ (включая этот 4-байтовый уникализатор), добавляются к КАЖДОМУ ВХОДУ в КАЖДЫЙ некластеризованный индекс - поэтому вы хотите сохранить их как можно меньше.

PS 2: ключ (ы) кластеризации добавляются к каждому некластеризованному индексу, потому что таким образом SQL Server будет извлекать целые строки после того, как будет найдено значение поиска в некластеризованном индексе. Это, так сказать, местоположение строки в базе данных. Следовательно, оно должно быть уникальным и узким .

5 голосов
/ 19 апреля 2012

Читать это http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx

Если чтение часто основывалось на поле даты и времени, хорошим выбором является составной ключ даты и идентификатора - в этом порядке (дата, идентификатор).

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