Mysql
 sql >> база данни >  >> RDS >> Mysql

Производителност на UUID в MySQL?

В моята работа използваме UUID като PK. Това, което мога да ви кажа от опит, е НЕ ГИ ИЗПОЛЗВАЙТЕ като PK (между другото SQL сървър).

Това е едно от онези неща, че когато имате по-малко от 1000 записа, всичко е наред, но когато имате милиони, това е най-лошото нещо, което можете да направите. Защо? Тъй като UUID не са последователни, така че всеки път, когато се вмъкне нов запис, MSSQL трябва да погледне правилната страница, за да вмъкне записа, и след това да вмъкне записа. Наистина грозната последица от това е, че страниците се оказват с различни размери и се оказват фрагментирани, така че сега трябва да правим периодично дефрагментиране.

Когато използвате автоматично увеличение, MSSQL винаги ще отиде до последната страница и в крайна сметка ще получите страници с еднакъв размер (на теория), така че производителността при избор на тези записи е много по-добра (също защото INSERT няма да блокират таблицата/страницата за толкова дълго).

Въпреки това, голямото предимство на използването на UUID като PK е, че ако имаме клъстери от DB, няма да има конфликти при сливане.

Бих препоръчал следния модел:1. PK INT Идентичност2. Допълнителна колона се генерира автоматично като UUID.

По този начин процесът на сливане е възможен (UUID ще бъде вашият РЕАЛЕН ключ, докато PK ще бъде просто нещо временно, което ви осигурява добра производителност).

ЗАБЕЛЕЖКА:Най-доброто решение е да използвате NEWSEQUENTIALID (както казах в коментарите), но за наследено приложение с малко време за рефакториране (и още по-лошо, че не се контролират всички вмъквания), не е възможно да се направи. Но наистина от 2017 г. бих казал, че най-доброто решение тук е NEWSEQUENTIALID или правенето на Guid.Comb с NHibernate.

Надявам се това да помогне



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да покажа MySQL процеси

  2. 1114 (HY000):Масата е пълна

  3. Възстановяване на MySQL база данни от физически файлове

  4. Има ли възможност ANY_VALUE за mysql 5.6?

  5. MySQL:Сортирайте GROUP_CONCAT стойности