Вимоги: Під час нещодавньої співбесіди мене запитали у чому різниця між 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 як основний ключ. Той час якВикористання інтелекту дасть вам найкращу продуктивність。
Коментар: ВикористанняПродуктивність впорядкованого GUID значно покращується。
Оригінальний текст два:Вхід за гіперпосиланням видно.
Тотожність — це цілий тип типу, десяткова без визначення, bigint прийнятний
Гід є фіксованим двійковим(16), який має 16 байт
Ідентичність збільшується (або віднімається), а guid є випадковим, тому при вставці даних,Перший не створює фрагментів, а другий — і оскільки другий не в порядку, порядок потрібно коригувати при вставці, тому перший зазвичай кращий за другий за продуктивністю.
Велика кількість інформації зазвичай поділяється на таблиці, тому ідентичність у багатьох випадках все ще більш доречна
Щодо значення первинного ключа, це залежить від того, як ви його розглядаєте при проєктуванні, для самої обробки даних первинний ключ не повинен бути змістовним, а якщо ви хочете, щоб первинний ключ містив бізнес-значення, то первинний ключ ідентичності, звісно, не має значення, але загалом краще розділяти бізнес-значення та обробку даних, бізнес постійно змінюється, якщо ви хочете перенести значення в основний ключ дизайну таблиці, тоді бізнес змінюється, вам доведеться більше коригувати структуру таблиці.
Оригінальний текст три:Вхід за гіперпосиланням видно.
1. У системах, які часто потребують міграції даних, рекомендується використовувати Guid. А додавання некластеризованих індексів до відповідних полів зовнішніх ключів, тобто полів, що використовуються для запитів на об'єднання, дуже корисне для підвищення продуктивності. Поле умови where також можна додавати для некластеризованих індексів.
2. При використанні типу Guid як первинного ключа тип даних має бути унікальним ідентифікатором і обов'язково запам'ятати йогоСкасувати первинний ключ "Агреговані індекси”
3. Для систем, які не потребують міграції, або для невеликих систем, дуже зручно використовувати int як первинний ключ, і є певне підвищення ефективності.
(Кінець)
|