2015-04-26 19 views
8

Nie próbuję ponownie uruchomić debugowania klucza UUID w porównaniu z kluczem szeregowym. Wiem, że istnieją ważne punkty po obu stronach. Używam identyfikatorów UUID jako klucza podstawowego w kilku moich tabelach.PostgreSQL Wydajność typu UUID

  • Typ kolumny: "uuidKey" text NOT NULL
  • Index: CREATE UNIQUE INDEX grand_pkey ON grand USING btree ("uuidKey")
  • klucz podstawowy: ADD CONSTRAINT grand_pkey PRIMARY KEY ("uuidKey");

Oto moje pierwsze pytanie; z PostgreSQL 9.4 czy jest jakaś wydajność przy ustawianiu typu kolumny na UUID?

W dokumentacji http://www.postgresql.org/docs/9.4/static/datatype-uuid.html opisano UUID, ale czy istnieją jakieś korzyści oprócz bezpieczeństwa typu przy stosowaniu tego typu zamiast typu text? W dokumentacji typów znaków oznacza, że ​​char(n) nie ma żadnej przewagi nad text w PostgreSQL.

Wskazówka: Nie ma różnicy wydajności między tymi trzema typami, oprócz ze zwiększonej przestrzeni dyskowej przy użyciu typu pusty wyściełane i kilka cykli CPU dodatkowo sprawdzić długość podczas przechowywania w wzdłużnych ograniczona kolumna. Chociaż character (n) ma zalety w niektórych innych systemach baz danych, nie ma takiej korzyści w PostgreSQL; w rzeczywistości charakter (n) jest zwykle najwolniejszy z trzech następujących ze względu na dodatkowe koszty przechowywania. W większości przypadków należy użyć tekstu lub zmiennej znaków.

Nie martwię się o miejsce na dysku. Zastanawiam się tylko, czy warto porównywać UUID do kolumn z tekstem?

Drugie pytanie, hash vs indeksy b-tree. Nie ma sensu sortowanie kluczy UUID, więc czy b-drzewo ma jakieś inne zalety w stosunku do indeksu hash?

+0

Jeśli tworzysz unikalny indeks oprócz klucza podstawowego, nie jest to konieczne. Po ustawieniu klucza podstawowego tworzony jest unikalny indeks na kluczu. –

+0

Mogłem pokazać to w niewłaściwej kolejności. Indeks został utworzony automagicznie przez ograniczenie klucza głównego. – adamek

+0

Wydaje się również, że zgodnie z dokumentami (w czasie tego komentarza 9.4 jest najnowszą stabilną wersją), odradza się używanie indeksów hash: http://www.postgresql.org/docs/9.4/static/indexes -types.html –

Odpowiedz

14

A UUID ma wartość 16 bajtów. Tak samo jak text ma wartość 32 bajtów. Rozmiary pamięci to:

select 
    pg_column_size('a0eebc999c0b4ef8bb6d6bb9bd380a11'::text) as text_size, 
    pg_column_size('a0eebc999c0b4ef8bb6d6bb9bd380a11'::uuid) as uuid_size; 
text_size | uuid_size 
-----------+----------- 
     36 |  16 

Mniejsze tabele prowadzą do szybszych operacji.

Powiązane problemy