Oracle數據庫的分區

  • 分區

    平常開發中最經常使用的技術,主要針對於大數據量,頻繁查詢數據等需求oracle

    oracle 提供了 7種分區,本文主要介紹較經常使用的幾種less

    • range 分區

      區域分區,分區的時候必須在建立表時指定函數

      • 語法:大數據

        create table (...) partition by range (filed) 
          	(partition r1 values less than (value));
          
          # value 爲分區的依據,好比value=1000,即不超過1000的值都會存放在此分區,
          # 若是隻有一個分區,那麼大於1000的值便沒法插入。能夠指定value=maxvalue
      • 查看分區狀況:code

        全部分區的狀況,能夠經過 where 條件判斷索引

        select * from user_table_partitions;
      • 查看分區數據:ci

        select * from table partition(r1);
      • 修改分區:開發

        addhash

        alter table tablename add partition r2 values less than (maxvalue);

        delit

        alter table tablename drop partition r2;
      • 跨分區操做

        更新數據時不能夠跨分區操做,好比更新以後的內容要從1分區移動到2分區,那麼須要設置可移動的分區才能夠跨分區查詢,不然沒法操做。

        alter table tablename enable row movement;
      • 分區索引

        分區以後雖然提升了查詢的效率,但僅僅是提升了數據的範圍,依然須要創建分區索引,進一步提升效率。

        • 分區索引分爲兩大類
          • local; 在每一個分區創建索引

            語法: create index index_name on table(field) local;

            查看: select * from user_ind_partitions;

            索引的字段必定是分區的字段

          • global; 全局索引

            • 一種是全局創建索引,這種方式分不分區都同樣,不建議使用;

            • 前綴索引

              還有一種是自定義索引的區間的索引,即前綴索引,這個是很是有意義的。

              語法: 必須指定 maxvalue

              create index index_name on table(field) global
                	partition by range(filed) (
                	partition r1 values less than(value),
                	partition r2 values less than(maxvalue)
                  );
    • hash 分區

      實現了均勻的負載值分配,增長 hash 分區能夠從新分配數據

      創建

      create table table_name (empno number,ename varchar(20)) 
        	partition by hash(empno) (partition p1, partition p2)

      查看分區結構

      select * from user_tab_partitions where table_name= "table_name";

      查看分區數據

      select * from table_name partition(p1);
    • list 分區

      建立

      create table table_name (
        	empno number,
        	ename varchar(20), 
        	city varchar(20)
        	partition by list(city) (
        		partition east values("shanghai「)
        	)
        )
    • 複合分區 對range分區的再次hash分區

      • 建立

        create table table_name(
          	sno number,
          	sname varchar(20)
          )
          partition by range (sno)
          subpartition by hash (sname) # 子分區
          subpartition 4               # 子分區分紅4分
          (
          	partition p1 values less than(1000),
          	partition p2 values less than(maxvalue)
          )
    • 間隔分區, 最經常使用及最好用

      是一種分區自動化的分區,能夠指定時間間隔分區,一直是 oracle 引覺得榮的一項技術

      語法:

      create table table_name (
        	sid int,
        	sdata timestamp )
        	partition by range(sdata) 
        	interval (
        		numtoyminterval(1, "MONTH")  # 函數,計算月份
        					 )
        		(
        			partition p1 values less than (TIMESTAMP'2019-02-01 00:00:00')
        		)

      至關於在 2014-02-01 以前的數據,創建一個分區;

      以後的數據每隔一個月創建一個分區。

相關文章
相關標籤/搜索