(Pracuję nad Heroku Postgres)
Używamy identyfikatorów UUID jako kluczy podstawowych w kilku systemach i działa to świetnie.
Polecam użyć uuid-ossp
rozszerzenie, a nawet postgres generuje dla Ciebie identyfikatory UUID:
heroku pg:psql
psql (9.1.4, server 9.1.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
dcvgo3fvfmbl44=> CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
dcvgo3fvfmbl44=> CREATE TABLE test (id uuid primary key default uuid_generate_v4(), name text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
dcvgo3fvfmbl44=> \d test
Table "public.test"
Column | Type | Modifiers
--------+------+-------------------------------------
id | uuid | not null default uuid_generate_v4() name | text |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
dcvgo3fvfmbl44=> insert into test (name) values ('hgmnz');
INSERT 0 1
dcvgo3fvfmbl44=> select * from test;
id | name
--------------------------------------+-------
e535d271-91be-4291-832f-f7883a2d374f | hgmnz
(1 row)
Wpływ na wydajność EDYTUJ
Będzie zawsze zależą od obciążenia pracą.
Klucz podstawowy liczby całkowitej ma zaletę lokalizacji, w której podobne dane znajdują się bliżej siebie. Może to być pomocne np. w przypadku zapytań o zakres, takich jak WHERE id between 1 and 10000
chociaż rywalizacja o blokadę jest gorsza.
Jeśli obciążenie odczytu jest całkowicie losowe, ponieważ zawsze wykonujesz wyszukiwanie klucza podstawowego, nie powinno być żadnego mierzalnego spadku wydajności:płacisz tylko za większy typ danych.
Dużo piszesz do tego stołu i czy ten stół jest bardzo duży? Możliwe, chociaż tego nie mierzyłem, że istnieją konsekwencje w utrzymaniu tego wskaźnika. W przypadku wielu zestawów danych identyfikatory UUID są w porządku, a używanie identyfikatorów UUID jako identyfikatorów ma kilka fajnych właściwości.
Wreszcie, mogę nie być najbardziej wykwalifikowaną osobą do omawiania lub udzielania porad na ten temat, ponieważ nigdy nie prowadziłem wystarczająco dużego stołu z UUID PK, w którym stało się to problemem. YMMV. (Mając to, chciałbym usłyszeć o ludziach, którzy mają problemy z podejściem!)