PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या PostgreSQL में प्राथमिक कुंजी के रूप में UUID खराब सूचकांक प्रदर्शन देगा?

(मैं हरोकू पोस्टग्रेज पर काम करता हूं)

हम कुछ प्रणालियों पर प्राथमिक कुंजी के रूप में यूयूआईडी का उपयोग करते हैं और यह बहुत अच्छा काम करता है।

मेरा सुझाव है कि आप uuid-ossp . का उपयोग करें एक्सटेंशन, और यहां तक ​​कि पोस्टग्रेज आपके लिए यूयूआईडी उत्पन्न करते हैं:

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 हालांकि ताला विवाद बदतर है।

यदि आपका पठन कार्यभार पूरी तरह से यादृच्छिक है जिसमें आप हमेशा प्राथमिक कुंजी लुकअप करते हैं, तो कोई मापनीय प्रदर्शन गिरावट नहीं होनी चाहिए:आप केवल बड़े डेटा प्रकार के लिए भुगतान करते हैं।

क्या आप इस टेबल पर बहुत कुछ लिखते हैं, और क्या यह टेबल बहुत बड़ी है? यह संभव है, हालांकि मैंने इसे मापा नहीं है, कि उस सूचकांक को बनाए रखने में निहितार्थ हैं। बहुत सारे डेटासेट के लिए यूयूआईडी ठीक हैं, और यूयूआईडी को पहचानकर्ता के रूप में उपयोग करने में कुछ अच्छे गुण हैं।

अंत में, मैं इस पर चर्चा करने या सलाह देने के लिए सबसे योग्य व्यक्ति नहीं हो सकता, क्योंकि मैंने कभी भी यूयूआईडी पीके के साथ इतनी बड़ी तालिका नहीं चलाई है जहां यह एक समस्या बन गई है। वाईएमएमवी। (ऐसा कहने के बाद, मुझे ऐसे लोगों के बारे में सुनना अच्छा लगेगा जो दृष्टिकोण के साथ समस्याओं में भाग लेते हैं!)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेस्क्ल परिणाम को बैश वैरिएबल में स्टोर करें

  2. मैं पोस्टग्रेज़ को एक सबक्वायरी को इनलाइन करने से कैसे रोक सकता हूँ?

  3. pg_views . पर क्वेरी से अधूरी जानकारी

  4. PostgreSQL और TimescaleDB के लिए AppArmor को कैसे कॉन्फ़िगर करें

  5. RoR:postgres में change_column नहीं कर सकता, MySQL में ठीक (विकास के लिए MySQL, Heroku पर Postgres)