Требования: Во время недавнего собеседования меня спросили, в чём разница между SQL Server database int и guid как основным ключом.У обоих есть свои плюсы и минусы, пожалуйста, взвесьте их с учётом ваших реальных бизнес-сценариев。
Оригинальный текст 1:Вход по гиперссылке виден.
Преимущества использования INT в качестве основного ключа:
1. Требуется небольшое пространство для хранения данных, всего 4 байта.
2. Производительность использования INT для операций вставки и обновления лучше, чем у GUID, поэтому использование int повышает производительность приложения.
3. Операции индексирования и объединения, int обеспечивает лучшую производительность.
4. Легко запоминать.
5. Поддержка получения последнего значения через функцию, например: Scope_Indentity().
Недостатки использования INT в качестве первичного ключа
1. Если часто происходит операция слияния таблиц, может возникать дублирование первичных ключей.
2. Существуют ограничения на область использования данных INT. Если объём данных большой, он может превышать диапазон значений INT.
3. Сложно обрабатывать распределённые хранимые таблицы данных.
Преимущества использования GUID в качестве основного ключа:
1. Это уникально.
2. Существует мало возможностей для дублирования.
3. Подходит для операций вставки и обновления больших объёмов данных.
4. Объединение данных между серверами очень удобно.
Недостатки использования GUID в качестве основного ключа:
1. Объём памяти большой (16 байт), поэтому он занимает больше размера диска.
2. Это трудно вспомнить. Производительность операции объединения ниже, чем у int.
3. Нет встроенной функции для получения последнего сгенерированного первичного ключа GUID.
4. GUID в качестве первичного ключа будет добавлен к другим индексам таблицы, что снизит производительность.
Сводка:
Выше перечислены преимущества и недостатки типов данных GUID и INT как первичных ключей. Думаю, для больших объёмов данных рекомендуется использовать guid в качестве основного ключа. тогда какИспользование интеллекта даст наилучшую производительность。
Комментарий: ИспользоватьПроизводительность упорядоченных интерфейсов значительно улучшается。
Оригинальный текст два:Вход по гиперссылке виден.
Тождественность — это целый тип типа, десятичный без определения десятичной, бигинт допустим
Гид фиксированный двоичный (16), который составляет 16 байт
Идентичность увеличивается (или вычитается), а guid — случайным, поэтому при вставке данныхПервый не производит фрагментов, а второй — и поскольку второй не в порядке, порядок должен быть скорректирован при вставке, поэтому первый обычно лучше второго по производительности.
Большое количество информации обычно делится по таблицам, поэтому идентичность во многих случаях всё ещё более подходяща
Что касается значения первичного ключа, это зависит от того, как вы рассматриваете его при проектировании: для самой обработки данных первичный ключ не обязан быть значимым, а если вам нужно, чтобы первичный ключ содержал бизнес-значение, то первичный ключ идентичности, конечно, не имеет значения, но в целом лучше разделять бизнес-смысл и обработку данных, бизнес постоянно меняется, если вы хотите перенести значение в основной ключ дизайна таблицы, тогда бизнес меняется, вам придётся больше корректировать структуру таблицы.
Оригинальный текст три:Вход по гиперссылке виден.
1. В системах, где часто требуется миграция данных, рекомендуется использовать Guid. Добавление некластерных индексов к соответствующим полям внешних ключей, то есть в поля, используемые для запросов к объединению, значительно помогает повысить производительность. Поле условия где также может быть добавлено по мере необходимости для некластерных индексов.
2. При использовании типа Guid в качестве основного ключа тип данных должен быть уникальным идентификатором и обязательно запоминать егоОтменить первичный ключ "Агрегированные индексы”
3. Для систем, которые не требуют миграции, или для небольших систем, всё равно очень удобно использовать int в качестве первичного ключа, и есть определённое повышение эффективности.
(Конец)
|