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

Oracle विभाजित तालिका

Oracle विभाजन तालिका क्या है?

विभाजन तालिका, अनुक्रमणिका या अनुक्रमणिका-संगठित तालिका को छोटे घटकों में विभाजित करता है। प्रत्येक घटक को एक विभाजन (या मिश्रित विभाजित वस्तुओं के लिए उप-विभाजन) कहा जाता है। प्रत्येक विभाजन का एक अद्वितीय नाम होता है, और इसमें वैकल्पिक रूप से अलग-अलग भंडारण विशेषताएं हो सकती हैं:उदाहरणों में संपीड़न, या विभिन्न टेबलस्पेस में संग्रहीत किया जाना शामिल है। एक अच्छी तरह से डिज़ाइन की गई विभाजन रणनीति ऑपरेशन को विभाजन के एकल या उप-सेट तक सीमित करके क्वेरी एक्सेस और अपडेट में सुधार कर सकती है।

प्रदर्शन के लिए विभाजन - विभाजन काटना

Oracle विभाजन तालिका सुविधा क्वेरी अनुकूलक को उन विभाजनों को छोड़ने में सक्षम बनाती है जो किसी विशेष SQL कथन के लिए आवश्यक नहीं हैं। SQL कथन के आधार पर, अनुकूलक उन विभाजनों और उप-विभाजनों की पहचान कर सकता है जिन्हें एक्सेस करने की आवश्यकता है, साथ ही साथ जो नहीं हैं। इसके परिणामस्वरूप क्वेरी प्रदर्शन में पर्याप्त सुधार हो सकता है, क्योंकि ऑप्टिमाइज़र डेटा के एक विशिष्ट उपसमुच्चय पर ध्यान केंद्रित करता है जिसे अतिरिक्त विधेय मौजूद होने पर और परिष्कृत किया जा सकता है। डेटा डिक्शनरी में शामिल डेटा को क्वेरी किए बिना विभाजन की सामग्री की पहचान करने के लिए। विभाजन टेबल्स/इंडेक्स और टेबलस्पेस के बीच डेटा डिक्शनरी की एक अतिरिक्त परत है

विभाजित तालिका की सीमा

Oracle डेटाबेस 11g में, एक तालिका में अधिकतम 1048575 (1024K - 1) विभाजन हो सकते हैं। LONG या LONG RAW डेटाटाइप के कॉलम वाली तालिकाओं के एकमात्र अपवाद के साथ, सभी तालिकाओं को विभाजित किया जा सकता है (प्रकार CLOB या BLOB के कॉलम सहित)।

तालिका विभाजन का प्रकार

Oracle डेटाबेस में 8.0 संस्करण से विभाजन उपलब्ध है और oracle लगातार प्रत्येक रिलीज़ के साथ अधिक से अधिक सुविधाएँ जोड़ रहा है। निम्न तालिका मुख्य परिवर्तनों का सारांश दिखाती है

Oracle द्वारा दी गई मुख्य विभाजन रणनीति हैं
(1)रेंज
(2)सूची
(3) हैश
(4) समग्र

विभाजन तालिका कैसे बनाएं

विभाजन के प्रकारों के आधार पर, यहाँ विभाजन तालिका बनाने का तरीका बताया गया है

श्रेणी विभाजन

Oracle विभाजन कुंजी के मूल्यों की लगातार श्रेणियों के आधार पर डेटा का विभाजन करता है।
प्रत्येक विभाजन का अंतिम बिंदु निम्नलिखित सिंटैक्स का उपयोग करके निर्दिष्ट किया जाता है:

VALUES LESS THAN (value-list)

उदाहरण

CREATE TABLE EXP_RANGE
 (ID NUMBER(15) NOT NULL,
 CODE_ID NUMBER(15) NOT NULL,
 PERIOD_NAME VARCHAR2(15) NOT NULL,
 ACTUAL_FLAG VARCHAR2(1) NOT NULL,
 VERSION_ID NUMBER(15),
 LAST_UPDATE_DATE DATE NOT NULL,
 . . . . . .
 )
 PARTITION BY RANGE (PERIOD_NAME)
 (
 PARTITION PR1 VALUES LESS THAN ('JAN-2019'),
 PARTITION PR2 VALUES LESS THAN ('FEB-2019')
 . . .
 . . .
 );

रेंज पार्टिशनिंग ऐतिहासिक और ट्रांजेक्शन डेटा के विभाजन के लिए उपयोगी है, क्योंकि रेंज पार्टिशन की सीमाएं टेबल और इंडेक्स में विभाजन के क्रम को परिभाषित करती हैं

सूची विभाजन

इस पद्धति में, ऑरैकल शाब्दिक मूल्यों की एक स्थिर सूची के आधार पर विशिष्ट पंक्तियों को विभाजन में मैप करता है। सूची विभाजन के लिए विभाजन कुंजी केवल एक स्तंभ पर आधारित हो सकती है।

CREATE TABLE EXP_LIST
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 OPEN_FLAG VARCHAR2(4) NOT NULL,
 . . . . . .
 ) PARTITION BY LIST (open_flag)
 (
 PARTITION PR1 VALUES ('YES'),
 PARTITION PR2 VALUES ('NO')
 );

हैश विभाजन

इस ऑरेकल में डेटा के भौतिक स्थान को तय करने के लिए हैशिंग एल्गोरिदम का उपयोग किया जाता है। हैश विभाजन डेटा को निश्चित संख्या में विभाजनों में समान रूप से वितरित करेगा।

CREATE TABLE EXP_HASH
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 ORDERED_ITEM VARCHAR2(2000),
 OPEN_FLAG VARCHAR2(1) NOT NULL,
 . . . . . .
 )
 PARTITION BY HASH (ID)
 PARTITIONS 10
 . . .
 . . .;
 );

समग्र विभाजन

इस ऑरेकल में रेंज, लिस्ट और हैश पार्टीशनिंग के कॉम्बिनेशन का इस्तेमाल किया गया है। कंपोजिट पार्टिशनिंग मेथड्स रेंज-हैश या रेंज-लिस्ट हैं।

CREATE TABLE sales_details
   ( prod_id       NUMBER(6)
   , cust_id       NUMBER
   , time_id       DATE
   , channel_id    VARCHAR2(1)
   , promo_id      NUMBER(6)
   , quantity_sold NUMBER(3)
   , amount_sold   NUMBER(10,2)
   )
  PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
   SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
  ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy'))
  , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy'))
  , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy'))
  , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

मौजूदा ऑब्जेक्ट को पार्टिशन किए गए ऑब्जेक्ट में कैसे ले जाएं

इस उपलब्धि को हासिल करने के कई तरीके हैं। मैं यहाँ सरल विधि समझा रहा हूँ
1। पार्टीशन किए गए क्लॉज का उपयोग करके और समानांतर विकल्प के साथ एक खाली पार्टीशन टेबल बनाएं। तालिका के नाम का नाम गैर-विभाजित तालिका से अलग होना चाहिए।
2. गैर-विभाजित तालिका से आवश्यक विभाजन के लिए डेटा पॉप्युलेट करें।
3. एक आसान कोड परिवर्तन के रूप में INSERT कथन के साथ APPEND oracle संकेत का उपयोग करने पर विचार करें जो अच्छा प्रदर्शन प्रदान करता है। यदि लॉगिंग सक्षम है और इंडेक्स मौजूद हैं, तो INSERT /*+ APPEND */ संकेत प्रभावी नहीं हो सकता है। इंडेक्स रखरखाव के ऊपरी हिस्से को कम करने के लिए, माइग्रेशन से पहले इंडेक्स ड्रॉप करें और विभाजित तालिका पॉप्युलेट होने के बाद उन्हें फिर से बनाएं।
4.विभाजित तालिका को मूल तालिका के समान नाम दें, या पर्यायवाची बदलें।
5. विभाजित टेबल के लिए टेबल इंडेक्स बनाएं

यह भी पढ़ता है
Oracle विभाजन अनुक्रमणिका
Oracle समानांतर क्वेरी
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RAWTOHEX () Oracle में फंक्शन

  2. PL/SQL Mail_Client API का उपयोग करके मेलबॉक्स से संदेश पुनर्प्राप्त करें

  3. उपयोगकर्ता-परिभाषित प्रकार के बारे में जानकारी कैसे प्राप्त करें?

  4. Oracle विभाजन सूचकांक

  5. Oracle संग्रहीत कार्यविधि के भीतर किसी अन्य उपयोगकर्ता की तालिका तक पहुँचना