Предложение по производительности SQL Server

Я создавал таблицы базы данных, используя только первичный ключ типа данных int, и у меня всегда была отличная производительность, но мне нужно было настроить репликацию слиянием с обновляемыми подписчиками.

В таблицах используется типичный первичный ключ, тип данных int и приращение идентификатора. При настройке репликации слиянием я должен добавить rowguid ко всем таблицам с функцией newsequentialid() в качестве значения по умолчанию. Я заметил, что rowguid включен, и мне было интересно, нужен ли мне первичный ключ?

Можно ли иметь 2 индекса, первичный ключ int и rowguid? Какова наилучшая компоновка таблицы репликации слиянием? Сохранять ли идентификатор int для удобства ссылок на строки и просто удалять индекс, но сохранять первичный ключ? Не знаю, какой маршрут выбрать, спасибо.


person Phxmobdev Developer    schedule 09.01.2012    source источник


Ответы (2)


Помните, что если вы удалите столбец int id и замените его GUID, вам, возможно, придется переработать большую часть ваших данных и ваших запросов. И вы действительно хотите делать такие запросы, как:

select * from orders where customer_id = '2053995D-4EFE-41C0-8A04-00009890024A'  

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

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

person HLGEM    schedule 09.01.2012
comment
Большое спасибо за помощь. Я думаю начать сначала, потому что я не хочу никаких проблем в будущем, поэтому я использую только rowguid и приемлемый дизайн? я должен установить rowguid в качестве первичного ключа? и, наконец, должен ли столбец иметь имя rowguid для репликации или я могу просто назвать его user_id? Еще раз большое спасибо за вашу помощь. - person Phxmobdev Developer; 10.01.2012

Единственным недостатком замены целочисленного первичного ключа на guid (о котором я знаю) является то, что идентификаторы GUID больше, поэтому btree (используемое индексное пространство) будет больше, и если у вас есть внешние ключи к этой таблице (что вы также необходимо изменить) гораздо больше места может в конечном итоге использоваться для (потенциально) многих таблиц.

person Chris Shain    schedule 09.01.2012