Изисквания: По време на скорошно интервю ме попитаха каква е разликата между SQL Server database int и guid като основен ключ.И двете имат плюсове и минуси, моля, претеглете ги според реалните си бизнес ситуации。
Оригинален текст 1:Входът към хиперлинк е видим.
Предимства на използването на INT като основен ключ:
1. Изисква малко пространство за съхранение на данни, само 4 байта.
2. Производителността при използване на INT за операции по вмъкване и актуализация е по-добра от тази на GUID, така че използването на int подобрява производителността на приложението.
3. Операции Index и Join – int има най-добра производителност.
4. Лесно за запомняне.
5. Поддръжка за получаване на най-новата стойност чрез функция, като: Scope_Indentity().
Недостатъци на използването на INT като основен ключ
1. Ако има честа операция за сливане на таблици, може да има дублиране на първичните ключове.
2. Съществуват ограничения относно обхвата на използването на INT данни. Ако има голямо количество данни, то може да надвиши диапазона на стойностите INT.
3. Трудно е да се обработват разпределени таблици със съхранени данни.
Предимства на използването на GUID като основен ключ:
1. Уникално е.
2. Има малко възможности за дублиране.
3. Подходящ е за операции по вмъкване и обновяване в голямо количество данни.
4. Сливането на данни между сървъри е много удобно.
Недостатъци на използването на GUID като първичен ключ:
1. Пространството за съхранение е голямо (16 байта), така че ще заема повече размер на диска.
2. Трудно е да си спомня. Производителността на операцията join е по-ниска от тази на int.
3. Няма вградена функция за получаване на най-новия генериран GUID основен ключ.
4. GUID като първичен ключ ще бъде добавен към други индекси на таблицата, което ще намали производителността.
Резюме:
Горното изброява предимствата и недостатъците на типовете данни GUID и INT като основни ключове. Мисля, че за големи обеми данни се препоръчва да се използва guid като първичен ключ. Като има предвидИзползването на интелект ще ти даде най-добрата производителност。
Коментар: ИзползванеПодредената производителност на GUID значително се подобрява。
Оригинален текст две:Входът към хиперлинк е видим.
Идентичност е цял тип тип, десетична без десетична дефиниция, бигинт е приемлив
Гидът е фиксиран двоичен (16), който е 16 байта
идентичността се увеличава (или изважда), а guid е случаен, така че когато се вмъкват данни,Първият няма да произведе фрагменти, докато вторият ще произведе, а тъй като вторият е извън ред, редът трябва да се коригира при вмъкване, така че първият обикновено е по-добър от втория по отношение на производителността.
Голямо количество информация обикновено се разделя на таблици, така че идентичността е все още по-подходяща в много случаи
Що се отнася до значението на първичния ключ, това зависи от това как го разглеждате при проектирането, за самата обработка на данни първичният ключ не е задължително да е смислен, а ако изисквате първичният ключ да съдържа бизнес смисъл, тогава първичният ключ за идентичност, разбира се, е безсмислен, но като цяло е по-добре да се раздели бизнес смисълът и обработката на данни, бизнесът постоянно се променя, ако искате да пренесете значението в основния ключ на дизайна на таблицата, тогава бизнесът се променя, ще трябва да коригирате структурата на таблицата повече.
Оригинален текст три:Входът към хиперлинк е видим.
1. В системи, които често трябва да извършват миграция на данни, се препоръчва използването на Guid. А добавянето на неклъстерни индекси към съответните външни ключови полета, тоест полета, използвани за заявки за съединяване, е от голяма полза за подобряване на производителността. Полето на условието where може да се добави и при подходящо за неклъстерирани индекси.
2. Когато използвате типа Guid като първичен ключ, типът данни трябва да бъде уникален идентификатор и да го запомнитеОтмени първичния ключ "Агрегатни индекси”
3. За системи, които не се нуждаят от миграция, или за малки системи, все още е много удобно да се използва int като първичен ключ и има известно подобрение в ефективността.
(Край)
|