каков будет эффект, если столбец типа данных uniqueidentifier кластеризован / некластеризованный индекс в таблице sql server 2005/2008. Я читал, что это плохо спроектированная таблица, как избежать этой проблемы и какое лучшее решение?
Если он не кластеризован, это просто означает, что индекс будет широким (16 байт на строку, а не 4 байта на строку с целым числом).
Если он кластеризован, вставки приведут к разбиению страницы в зависимости от того, сколько свободного места (коэффициент заполнения) вы оставите в индексе при его создании / перестройке.
Есть несколько вопросов о том, как SO обсуждает эту тему:
Должен ли я избавиться от кластеризованных индексов в столбцах Guid
Преимущества и недостатки ключей базы данных GUID / UUID
Кластерный первичный ключ в столбце с уникальным идентификатором в SQL Server
Повышение производительности первичного ключа GUID индекса кластера
GUID является плохим выбором для кластеризованного индекса в SQL Server, поскольку из-за случайности значений кластеризованный индекс плохо фрагментируется.
Кроме того, поскольку поля кластерного индекса реплицируются в каждый из некластеризованных индексов, это также может привести к значительной трате дискового пространства и памяти в SQL Server.
GUID является отличным выбором с точки зрения программиста - более или менее случайным, почти гарантированно уникальным - но с точки зрения базы данных, использование их в качестве кластерного индекса в SQL Server - очень плохой выбор.
См. Различные статьи Ким Триппа на эту тему - очень увлекательно!
http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx
http://sqlskills.com/BLOGS/KIMBERLY/post/The-Clustered-Index-Debate-Continues.aspx
http://www.sqlskills.com/BLOGS/KIMBERLY/post/Ever-increasing-clustering-key-the-Clustered-Index-Debateagain!.aspx
Марк