2009-09-29 1 views
1

Если у вас есть таблица с не более чем 10 записями, и она упоминается во множестве других таблиц (с помощью связи FK) с по меньшей мере 1 000 000 записей в каждой таблице.GUID против Int

Что вы порекомендуете для типа PK (GUID или tinyint), если репликация никогда не будет использоваться? меня врезаться в this page с followng выдержке:

Guids на SQL Server может выполнять БЫСТРЕЕ, чем числовые типы, как только вы превысите около 100 000 строк на современном оборудовании. Это связано с индексацией оптимизации (каскадные из Guid блоков) MS реализовала

правда ли, что GUID будет работать быстрее в моем случае?

Заранее спасибо;)

ответ

3

INT будет быстрее - без вопросов. И использовать меньше места, тоже (хорошо, с 10 строк, это не большая разница на самом деле).

INT ИМО также намного проще в использовании:

SELECT (list of fields) 
FROM dbo.MyTable 
WHERE ID = 5 

просто намного проще писать и запоминать, чем

SELECT (list of fields) 
FROM dbo.MyTable 
WHERE OID = '8D1E4C8C-54B9-4EB2-B123-FC07E340EC7B' 

Так что я бы почти всегда (в 95% + от случаи) включили мой голос для INT, а не GUID.

Кроме того, поскольку GUID как кластерный ключ в SQL Server (который по умолчанию используется по умолчанию) ужасен для производительности (читайте это сообщение GUIDs as Primary Keys and/or the clustering key блога «Королева индексирования», Кимберли Трипп для получения дополнительной информации по теме), Я просто попытался бы сделать привычкой использовать INT (возможно: INT IDENTITY) в качестве основного и кластерного ключа, когда это возможно.

Марк

3

Если у вас есть сомнения, профиль. Но с 10 рядами в таблице сомневаюсь, что вы заметите какую-либо разницу.

+0

Я собираюсь создать эту базу данных, поэтому использование профиля - это не очень хорошая идея. –

0

Если вы можете гарантировать, что на вашем столе никогда не будет более 10 записей, я бы придерживался ints. Комментарий кажется актуальным только для очень больших таблиц (> 100 000 строк).

3

Все быстро для малого N. Просто используйте тип PK, который согласуется с остальной частью вашей базы данных.

4

Вы не говорите ничего о подсчете строк в таблицах, ссылающихся на таблицу table_with_10_rows ... если эти таблицы содержат более 100 тыс. Строк, это может быть.

+0

Вы имеете в виду, что GUID работает быстрее? если да, не могли бы вы рассказать мне, почему? –

0

Другой вариант вы должны рассмотреть так мало записей с использованием TINYINT вместо междунар. См. Аргументы для и против здесь: SOF question

Смежные вопросы