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

Ще даде ли UUID като първичен ключ в PostgreSQL лоша производителност на индекса?

(Работя върху Heroku Postgres)

Използваме UUID като първични ключове на няколко системи и работи чудесно.

Препоръчвам ви да използвате uuid-ossp разширение и дори Postgres да генерира 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)

РЕДАКТИРАНЕ на последиците за производителността

Ще винаги зависи от натовареността ви.

Целочисленият първичен ключ има предимството на локалността, където подобни данни се намират по-близо един до друг. Това може да бъде полезно за например:заявки от тип диапазон, като WHERE id between 1 and 10000 въпреки че спорът за заключване е по-лош.

Ако работното ви натоварване при четене е напълно произволно, тъй като винаги извършвате търсене на първичен ключ, не би трябвало да има никакво измеримо влошаване на производителността:вие плащате само за по-големия тип данни.

Пишете ли много на тази маса и тази маса много ли е голяма? Възможно е, въпреки че не съм измервал това, да има последици от поддържането на този индекс. Въпреки това за много набори от данни UUID са добре и използването на UUID като идентификатори има някои хубави свойства.

И накрая, може да не съм най-квалифицираният човек за обсъждане или съвет по този въпрос, тъй като никога не съм управлявал достатъчно голяма маса с UUID PK, където това се е превърнало в проблем. YMMV. (Като казах това, бих се радвал да чуя за хора, които срещат проблеми с подхода!)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте екранизирания символ на Unicode обратно в действителен знак в PostgreSQL

  2. Връщане на множество полета като запис в PostgreSQL с PL/pgSQL

  3. Как да намерите пътя на pg_config

  4. Разрешаване на нула в уникална колона

  5. Архивиране и възстановяване на PostgreSQL 9.0