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

अनुक्रमिक अनुक्रमणिका के लिए भरण कारक जो PK है

FILLFACTOR

केवल INSERT . के साथ और SELECT आपको एक FILLFACTOR . का उपयोग करना चाहिए 100 . का हर जगह।

यदि आप UPDATE के साथ "विगल" नहीं करने जा रहे हैं, तो प्रति मेमोरी ब्लॉक में विग्गल रूम छोड़ने का कोई मतलब नहीं है। एस.

FILLFACTOR . के पीछे का तंत्र बहुत सरल है। INSERT s केवल FILLFACTOR द्वारा घोषित प्रतिशत तक प्रत्येक डेटा पृष्ठ (आमतौर पर एक 8 kb ब्लॉक) भरें स्थापना। साथ ही, जब भी आप VACUUM FULL run चलाते हैं या CLUSTER मेज पर, प्रति ब्लॉक वही विग्गल रूम फिर से स्थापित किया गया है। आदर्श रूप से, यह UPDATE . की अनुमति देता है एक ही डेटा पृष्ठ में नए पंक्ति संस्करणों को संग्रहीत करने के लिए, जो बहुत सारे UPDATE से निपटने के दौरान पर्याप्त प्रदर्शन को बढ़ावा दे सकता है एस। H.O.T के संयोजन में भी फायदेमंद अपडेट :

अगर नहीं हैं अपडेट करें, इसके लिए जगह बर्बाद न करें और FILLFACTOR = 100 . सेट करें ।

जानकारी का मूल स्रोत:CREATE TABLE या CREATE INDEX

अन्य अनुकूलन

लेकिन आप कुछ और कर सकते हैं - चूंकि आप अनुकूलन के लिए एक चूसने वाले लगते हैं ... :)

CREATE TABLE dev_transactions
( transaction_id serial PRIMARY KEY,
  gateway integer NOT NULL,
  moment timestamp NOT NULL,
  transaction_type smallint NOT NULL,
  status smallint NOT NULL,
  device integer NOT NULL,
  controler smallint NOT NULL,
  token integer,
  et_mode character(1));

यह आपकी तालिका को डेटा संरेखण के संबंध में अनुकूलित करता है और पैडिंग . से बचता है एक सामान्य 64 बिट सर्वर के लिए और कुछ बाइट्स बचाता है, शायद औसतन केवल 8 बाइट - आप आमतौर पर "कॉलम टेट्रिस:

के साथ ज्यादा निचोड़ नहीं सकते हैं।

साथ ही, NOT NULL रखें बहुत कम प्रदर्शन बोनस के लिए तालिका की शुरुआत में कॉलम।

साथ ही, आपकी तालिका में 9 स्तंभ हैं . इसका अर्थ है अतिरिक्त 8 बाइट्स विस्तारित नल बिटमैप . के लिए - जो केवल 8 कॉलम . के लिए शुरुआती 1-बाइट NULL बिटमैप में फ़िट हो जाएगा .
यदि आप et_mode को परिभाषित करते हैं और token NOT NULL , सभी कॉलम NOT NULL . हैं और NULL बिटमैप का उपयोग बिल्कुल भी किया जाता है, 8 बाइट्स को मुक्त करता है।
यह प्रति पंक्ति भी काम करता है यदि आप कॉलम NOT NULL घोषित नहीं करते हैं . यदि सभी स्तंभों में मान हैं, तो इस पंक्ति के लिए कोई NULL बिटमैप नहीं है। आपके मामले में, यह विरोधाभास प्रभाव की ओर ले जाता है जो et_mode . के लिए मानों को भरता है और token आपके संग्रहण आकार को छोटा बना सकता है या कम से कम वही रहें:

जानकारी का मूल स्रोत:डेटाबेस भौतिक संग्रहण पर मैनुअल

निश्चित प्रमाण प्राप्त करने के लिए अपनी मूल तालिका के साथ पंक्तियों के आकार (मानों से भरे हुए) की तुलना करें:

SELECT pg_column_size(t) FROM dev_transactions t;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. [वीडियो] Ansible और PostgreSQL

  2. कमांड लाइन से PostgreSQL क्वेरी चलाएँ

  3. मैं PostgreSQL में डेटाबेस की स्कीमा कैसे निर्यात कर सकता हूं?

  4. PostgreSQL में क्वेरी ऑप्टिमाइज़ेशन। मूल बातें समझाएं - भाग 2

  5. विंडो फ़ंक्शंस में रिंग डेटा संरचना का उपयोग कैसे करें