Почему первичные ключи генерируются идентификаторами GUID aspnet_regsql?

Я разрабатываю веб-сайт ASP.NET в Visual Studio 2010 (с пакетом обновления 1, большое спасибо много). Я хочу использовать встроенные в .NET поставщики членства и ролей для SQL Server 2008.

Я уже очень давно занимаюсь разработкой технологий Microsoft и потирался локтями с некоторыми из лучших администраторов баз данных SQL Server в мире. бизнес. Каждый из них сказал мне держаться подальше от GUIDS в качестве первичных ключей при создании таблицы базы данных, которая будет:

  1. Иметь очень большое количество записей.
  2. Иметь большой объем вставок и удалений.

Причина: поскольку первичный ключ является кластеризованным индексом!

Это в основном означает, что каждый запись, вставленная в таблицу , должна подчиняться ограничениям индекса. Поэтому, если индекс отсортирован ASC, запись с вновь созданным GUID должна быть физически вставлена ​​в нужной последовательности в соответствующую таблицу данных.

Это было бы хорошо для таблицы с несколькими тысячами записей. или так. SQL Server нужно будет переместить только несколько. Однако, если таблица данных содержит несколько миллионов записей и обнаруживает, что она должна вставить новую запись в строку 216., это может занять значительное время (по веб-стандартам). Он должен физически переместить все эти строки вниз, чтобы вставить новую.

Итак, мой вопрос сводится к следующему. Поскольку Microsoft и все DBS, которые мы знаем и любим, сказали НЕТ GUID в качестве первичных ключей ... почему инструмент ASPNET_REGSQL создает таблицы, используя GUID в качестве первичного ключа?

Или я что-то упускаю? Есть ли в ядре SQL Profiler новая функция, которая больше не рассматривает GUIDS как задачу?

6
задан R. Martinho Fernandes 26 April 2011 в 01:46
поделиться