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

क्या मुझे अपनी तालिका का विभाजन/उपविभाजन करना चाहिए?

आप इस तरह से कोशिश कर सकते हैं:स्वचालित विभाजन बनाने के लिए ओरेकल को बताने के लिए इंटरवल का उपयोग करें। आपको कॉलम (संख्या या तिथि) और एक अंतराल (मेरे उदाहरण 1 महीने में) परिभाषित करना होगा। ओरेकल एक ही विभाजन में सभी पंक्तियों को एक ही अंतराल में रखेगा (इस मामले में एक ही महीने में)। यदि विभाजन मौजूद नहीं है तो बनाया जाएगा।

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date)                              
interval (numtoyminterval(1,'MONTH'))(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

ऐसा ही टाइप कॉलम के साथ भी किया जा सकता है। अधिक जानकारी:http://www.oracle.com/ Technetwork/articles/sql/11g-partitioning-084209.html

प्रत्येक विभाजन को TEMPLATE कुंजी का उपयोग करके उप-विभाजित किया जा सकता है।

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
    SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)                          
(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

इस मामले में आप एक स्वचालित उप-विभाजन नहीं बना सकते हैं, यदि कोई नया प्रकार जोड़ा जाएगा तो आपको एक परिवर्तन तालिका विवरण चलाना होगा। यहाँ अधिक जानकारी; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655

आपके उदाहरण में:

create table prova_log(
       id_dispositive    number,
       type       number,
       date_verification    date,
       status  number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION type1 VALUES (1),
    SUBPARTITION type2 VALUES (2),
    SUBPARTITION type3 VALUES (3),
    SUBPARTITION type4 VALUES (4)
)                          
(
   partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);

यदि आप सम्मिलित करने का प्रयास करते हैं:

insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);

आप अपनी मेज पर 2 विभाजन देखेंगे।

अब मैंने इसका परीक्षण कर लिया है!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL डेवलपर 3.1.07 listagg का उपयोग कर वर्णों के बीच अतिरिक्त स्थान

  2. भौतिक स्टैंडबाय में ORA-01264

  3. Oracle में RANK, DENSE_RANK और ROW_NUMBER कार्य करता है

  4. Oracle में अपरकेस अक्षरों वाली पंक्तियों को खोजने के 4 तरीके

  5. iBatis का उपयोग करके आप Oracle 10g XE db में सरणियाँ कैसे लिखते हैं?