Я разрабатываю веб-сайт ASP.NET в Visual Studio 2010 (с пакетом обновления 1, большое спасибо). Я хочу использовать встроенные поставщики членства и ролей .NET для SQL Server 2008.
Я занимаюсь разработкой технологий Microsoft в течение очень долгого времени и общался с некоторыми из лучших администраторов баз данных SQL Server в бизнесе. Каждый из них советовал мне держаться подальше от использования GUIDS в качестве первичных ключей при построении таблицы базы данных, которая будет:
- Иметь очень большое количество записей.
- Иметь большой объем вставок и удалений.
Причина: потому что первичный ключ является кластеризованным индексом!
В основном это означает, что каждая запись, вставленная в таблицу, должна подчиняться ограничениям индекса. Таким образом, если индекс отсортирован по ASC, запись с вновь сгенерированным GUID должна быть физически вставлена в соответствующей последовательности в рассматриваемую таблицу данных.
Это было бы прекрасно для таблицы с несколькими тысячами записей или около того. SQL Server пришлось бы перепозиционировать только несколько. Однако, если таблица данных содержит несколько миллионов записей и обнаруживает, что она должна вставить новую запись в строку 216, это может занять значительное время (по веб-стандартам). Он должен физически переместить все эти строки вниз, чтобы вставить новую.
Так что мой вопрос просто это. Поскольку Microsoft и все DBS, которые мы знаем и любим, сказали НЕТ GUID в качестве первичных ключей... почему инструмент ASPNET_REGSQL создает таблицы, используя GUID в качестве первичного ключа?
Или я что-то упускаю? Есть ли в движке SQL Profiler в 2008 г. новая функция, которая больше не рассматривает GUIDS как задачу?