PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

UUID come chiave primaria in PostgreSQL darà cattive prestazioni dell'indice?

(Lavoro su Heroku Postgres)

Usiamo gli UUID come chiavi primarie su alcuni sistemi e funziona benissimo.

Ti consiglio di usare uuid-ossp estensione e persino postgres genera UUID per te:

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)

MODIFICA le implicazioni sulle prestazioni

Sarà sempre dipendono dal tuo carico di lavoro.

La chiave primaria intera ha il vantaggio della località in cui i dati simili sono più vicini. Questo può essere utile per es.:query di tipo intervallo come WHERE id between 1 and 10000 anche se la contesa di blocco è peggiore.

Se il tuo carico di lavoro di lettura è totalmente casuale in quanto esegui sempre ricerche di chiavi primarie, non dovrebbe esserci alcun degrado misurabile delle prestazioni:paghi solo per il tipo di dati più grande.

Scrivi molto su questo tavolo e questo tavolo è molto grande? È possibile, anche se non l'ho misurato, che ci siano implicazioni nel mantenere quell'indice. Per molti set di dati, tuttavia, gli UUID vanno bene e l'utilizzo degli UUID come identificatori ha alcune proprietà interessanti.

Infine, potrei non essere la persona più qualificata per discutere o consigliare su questo, poiché non ho mai gestito un tavolo abbastanza grande con un UUID PK in cui è diventato un problema. YMMV. (Detto questo, mi piacerebbe sentire parlare di persone che incontrano problemi con l'approccio!)