OceanBase 引用分區(qū)表和索引

2021-06-18 10:03 更新

表和索引可以分區(qū)。進(jìn)行分區(qū)時(shí),這些 Schema 對(duì)象由許多稱為分區(qū)的部分組成,所有這些部分都具有相同的邏輯屬性。例如,表中的所有分區(qū)共享相同的列和約束定義,而索引中的所有分區(qū)共享相同的索引列。

分區(qū)擴(kuò)展名和子分區(qū)擴(kuò)展名使用戶可以執(zhí)行某些分區(qū)級(jí)和子分區(qū)級(jí)操作,例如,僅在一個(gè)分區(qū)或子分區(qū)上刪除其中的所有行。沒有擴(kuò)展名稱時(shí),此類操作將要求您使用判斷語句定義范圍(?WHERE? 子句)。對(duì)于范圍分區(qū)表和列表分區(qū)表,嘗試用判斷語句描述分區(qū)級(jí)操作可能會(huì)很麻煩,尤其是當(dāng)范圍分區(qū)鍵使用多個(gè)列時(shí)。對(duì)于哈希分區(qū)和子分區(qū),使用判斷語句更加困難,因?yàn)檫@些分區(qū)和子分區(qū)是基于系統(tǒng)定義的哈希函數(shù)。

分區(qū)擴(kuò)展名使您可以像使用表一樣使用分區(qū)。此方法的一個(gè)優(yōu)點(diǎn)(對(duì)范圍分區(qū)的表最有用)是,您可以通過對(duì)其他用戶或角色授予(或撤消)這些視圖的特權(quán)來構(gòu)建分區(qū)級(jí)別的訪問控制機(jī)制。要將分區(qū)用作表,需要通過從單個(gè)分區(qū)中選擇數(shù)據(jù)來創(chuàng)建視圖,然后將該視圖用作表。

語法

當(dāng)在 SQL 語句的語法或軌道圖中出現(xiàn) ?partition_extended_name? 或者 ?subpartition_extended_name? 元素時(shí),用戶可以通過這兩個(gè)元素指定分區(qū)擴(kuò)展表名和子分區(qū)擴(kuò)展表名。?partition_extended_name? 的語法:

PARTITION partition
| 
PARTITION FOR ( partition_key_value [, partition_key_value]... )

?subpartition_extended_name? 的語法:

SUBPARTITION subpartition
| 
SUBPARTITION FOR ( subpartition_key_value [, subpartition_key_value]... )

DML 語句 ?INSERT?、?UPDATE? 、 ?DELETE? 和 ?ANALYZE? 語句需要在分區(qū)或子分區(qū)名稱的周圍加上括號(hào)。這個(gè)小的區(qū)別體現(xiàn)在 partition_extension_clause 元素中。在 ?partition_extended_name?,?subpartition_extended_name? 和 ?partition_ extension_clause? 中,可以使用 ?PARTITION FOR? 和 ?SUBPARTITION FOR? 子句在不使用名稱的情況下引用分區(qū)。它們對(duì)任何類型的分區(qū)均有效,尤其是間隔分區(qū)。將數(shù)據(jù)插入表中時(shí),間隔分區(qū)會(huì)根據(jù)需要被自動(dòng)創(chuàng)建。

對(duì)于上述元素中各自的 ?partition_key_value? 或 ?subpartition_key_value? 部分,它們?yōu)槊總€(gè)分區(qū)鍵列指定一個(gè)值。對(duì)于多列分區(qū)鍵,需要為每個(gè)分區(qū)鍵指定一個(gè)值。對(duì)于復(fù)合分區(qū),對(duì)每個(gè)分區(qū)鍵指定一個(gè)值后,需要繼續(xù)為每個(gè)子分區(qū)鍵指定一個(gè)值。所有分區(qū)鍵值均以逗號(hào)分隔。對(duì)于間隔分區(qū),您只能指定一個(gè) ?partition_key_value?,并且它必須是有效的 ?NUMBER? 數(shù)據(jù)類型或日期時(shí)間數(shù)據(jù)類型的值。用戶的 SQL 語句將在包含用戶指定了值的分區(qū)或子分區(qū)上運(yùn)行。

擴(kuò)展名稱的限制

使用分區(qū)擴(kuò)展表名和子分區(qū)擴(kuò)展表名時(shí)有以下限制:

  • 名稱中沒有遠(yuǎn)程表:擴(kuò)展分區(qū)表名和子分區(qū)擴(kuò)展表名不能包含數(shù)據(jù)庫鏈接或能轉(zhuǎn)換為具有數(shù)據(jù)庫鏈接的表的同義詞。要使用遠(yuǎn)程分區(qū)和遠(yuǎn)程子分區(qū),需要在遠(yuǎn)程站點(diǎn)上使用擴(kuò)展表名語法創(chuàng)建一個(gè)視圖,然后引用該遠(yuǎn)程視圖。
  • 名稱中沒有同義詞:必須使用基表指定分區(qū)或子分區(qū)擴(kuò)展名,不能使用同義詞,視圖或任何其他對(duì)象。
  • 在 ?PARTITION FOR? 和 ?SUBPARTITION FOR? 子句中,不能指定關(guān)鍵字 ?DEFAULT? 、?MAXVALUE? 或綁定變量為 ?partition_key_value? 或 ?subpartition_key_value? 的值。
  • 在 ?PARTITION? 和 ?SUBPARTITION? 子句中,不能為分區(qū)或子分區(qū)名稱指定綁定變量。

示例

在以下示例中,sales 是具有分區(qū) sales_q1_2000 的分區(qū)表。以下語句創(chuàng)建了單個(gè)分區(qū) sales_q1_2000 的視圖,然后像使用表一樣使用它。本示例從分區(qū)中刪除了一些行:

/*為分區(qū) sales_q1_2000 創(chuàng)建視圖 Q1_2000_sales*/
CREATE VIEW Q1_2000_sales
AS
SELECT *
FROM sales PARTITION (SALES_Q1_2000);
/*刪除視圖 Q1_2000_sales 中符合條件 amount_sold < 0 的值*/
DELETE FROM Q1_2000_sales
WHERE amount_sold < 0;
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)