Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / uniqueidentifier как первичный ключ / 5 сообщений из 5, страница 1 из 1
05.04.2002, 07:31
    #32027034
SeregaA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uniqueidentifier как первичный ключ
Привет, All

Есть ли у кого опыт использования в качастве первичного ключа таблицы поле типа uniqueidentifier. У нас создается распределенная база, (~40 merge pull подписчиков), и я предвижу проблемы с пересекающимися PK, и поле типа uniqueidentifier default NEWID() меня бы избавило от этой проблемы. Хотелось бы услышать (увидеть) комментарии по поводу быстродействия JOIN-ов по таким ключам, и узнать что я найду, и что потеряю, используя subj.

Спасибо.
...
Рейтинг: 0 / 0
05.04.2002, 08:28
    #32027054
3.14_d'or
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uniqueidentifier как первичный ключ
Плюсы:

1. Можно явно указать ID при вставке (отличие от int identity), что снимает проблемы с получением ID только что вставленной записи на корню
2. Нет пересечения по ID с другими записями (не было ни разу)
3. Нет возможности угадать следующий ID (актуально для int identity) имея на руках некий
4. Для репликации плюс...

Минус:

1. Дольше запросы. Но на 1.000.000 записей join двух таблиц по UNIQUEIDENTIFIER проходит практически также, как и на int.
Числа не приведу, но тест делал...
2. Больше места под хранение

Вот такие дела.
...
Рейтинг: 0 / 0
05.04.2002, 09:09
    #32027066
SeregaA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uniqueidentifier как первичный ключ
Спасибо. Похоже, в моем случае даже и минусов не остается - в базе куча таблиц, и из них всего парочка объемом >1.000.000 записей, следовательно и требования к месту под хранение не критичны.
...
Рейтинг: 0 / 0
05.04.2002, 09:12
    #32027067
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uniqueidentifier как первичный ключ
Все так. Добавлю только, что

- если будешь настраивать merge репликацию на таблицу, где primary key int'овое поле, то все равно будет создано дополнительное поле типа uniqueidentifier, так что в этом случае места для хранения потребуется больше.

- тесты на int и uniqueidentifier в случае некластерного индекса дают практически одинаковый результат на join. Кластерный int'овый вроде должен быть быстрее. На uniqueidentifier кластерный индекс вешать не стоит исходя из самого этого понятия, иначе каждый insert будет фактически приводить к физическому перемещению кучи данных.

- с merge репликацией сплошные плюсы и радости по сравнению с геморроем полей identity.
...
Рейтинг: 0 / 0
05.04.2002, 13:49
    #32027100
3.14_d'or
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uniqueidentifier как первичный ключ
2GreenSunrise:

>На uniqueidentifier кластерный индекс вешать не стоит исходя из самого этого понятия, иначе каждый insert будет >фактически приводить к физическому перемещению кучи данных.

Это спорно: если Вам необходимо ускорить INSERT'ы, то да, если SELECT'ы то нет. Классическая проблема OLTP vs DSS.
Первичный ключ типа uniqueidentifier с кластерным индексом значильно ускоряет выборки по сравнению с некластерным на том же поле.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / uniqueidentifier как первичный ключ / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]