本書從初學者的角度出發, 以通俗易懂的語言, 豐富多彩的實例, 詳細介紹了使用Oracle 11g進行數據管理的各方面技術。全書共分18章, 包括Oracle 11g概述, Oracle 11g體系結構, SQL*Plus命令, SQL語言基礎, PL/SQL編程, 過程、函數、觸發器和包, 管理控制文件和日志文件, 管理表空間和數據文件, 數據表對象, 其他數據對象, 表分區與索引分區, 用戶管理與權限分配, Oracle系統調優, 優化SQL語句等。
“軟件開發視頻大講堂”叢書系清華社“視頻大講堂”重點大系之一。該大系包括多個子系列,每個子系列的圖書在其同品種的圖書中銷售名列前茅,其中:
4個品種榮獲“全行業暢銷品種”
1個品種榮獲2012年清華大學出版社“專業暢銷書”一等獎
絕大多數品種在“全國計算機零售圖書排行榜”同品種排行中名列前茅
截至目前該大系累計銷售超過130萬冊
該大系已成為近年來清華社計算機專業基礎類零售圖書暢銷品牌之一
“軟件開發視頻大講堂”系列作為清華社“視頻大講堂”大系的子系列之一,繼承和創新了清華社“視頻大講堂”大系的編寫模式、寫作風格和優良品質。本書突出了以下內容:
總長總時長23小時同步視頻演示講解,可反復觀摩,讓學習更為快捷、高效
436個典型實例,通過實例學習更深入,更有趣,更有動力
369道面試真題,了解工作實例及面試問題,更好適應企業需求
138項能力測試題目,檢測是否過關,了解學習之不足。
根據全國計算機零售圖書排行榜,本書長期在oracle類全國零售排行前列
“軟件開發視頻大講堂”系列作為清華社“視頻大講堂”大系的子系列之一,執著于專業,精細于品質。
集基礎知識、核心技能、高級應用、項目案例于一體
好學、好用、高效
明日科技,是一家專業從事軟件開發、教育培訓以及軟件開發教育資源整合的高科技公司,其編寫的教材既注重選取軟件開發中的必需、常用內容,又注重內容的易學、方便以及相關知識的拓展,深受讀者喜愛。其編寫的圖書主要有“軟件開發視頻大講堂”“軟件開發實戰1200例”“軟件工程師開發大系”等系列。多次榮獲“全行業暢銷品種”“中國大學出版社暢銷書”等獎項,多個品種長期位居同類圖書銷售排行榜的前列。
11.2.1 范圍分區
創建范圍分區的關鍵字是RANGE,創建該分區后,其中的數據可以根據分區鍵值指定的范圍進行分布,當數據在范圍內均勻分布時,性能最好。例如,如果選擇一個日期列作為分區鍵,分區“AUG-2011”就會包括所有從01-AUG-2011到31-AUG-2011之間的分區鍵值(假設分區的范圍是從該月的第一天到該月的最后一天)。
當表結構采用范圍分區時,首先要考慮分區的列應該符合范圍分區的方法;其次要考慮列的數據值的取值范圍;最后考慮列的邊界問題,下面通過若干具體實例來演示范圍分區的創建。
【例11.1】 創建一個商品零售表,然后為該表按照銷售日期所在的季度創建4個分區,代碼及運行結果如下(實例位置:光盤\TM\sl\11\1)。
SQL> create table ware_retail_part --創建一個描述商品零售的數據表
2 (
3 id integer primary key, --銷售編號
4 retail_date date, --銷售日期
5 ware_name varchar2(50) --商品名稱
6 )
7 partition by range(retail_date)
8 (
9 --2011年第一個季度為par_01分區
10 partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBSP_1,
11 --2011年第二個季度為par_02分區
12 partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBSP_1,
13 --2011年第三個季度為par_03分區
14 partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBSP_2,
15 --2011年第四個季度為par_04分區
16 partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBSP_2
17 );
表已創建。
在為商品零售表ware_retail_part創建了4個范圍分區之后,下面向該表中插入若干條記錄。
【例11.2】 向表ware_retail_part插入3條記錄,代碼及運行結果如下。
SQL> insert into ware_retail_part values(1,to_date('2011-01-20','yyyy-mm-dd'),'
平板電腦');
已創建 1 行。
SQL> insert into ware_retail_part values(2,to_date('2011-04-15','yyyy-mm-dd'),'s
智能手機');
已創建 1 行。
SQL> insert into ware_retail_part values(3,to_date('2011-07-25','yyyy-mm-dd'),'s
MP5');
已創建 1 行。
在向ware_retail_part表中插入若干條記錄之后,用戶就可以通過分區表(即進行了分區的數據表)來查詢數據了,這種方式的查詢速度要比從整個表中查詢快得多,使用分區表查看數據的例子如下。
【例11.3】 查詢數據表ware_retail_part中分區par_02中的全部記錄,代碼如下。
SQL> select * from ware_retail_part partition(par_02);
本例運行結果如圖11.1所示。
另外,Range分區的字段可以是兩個或者多個,來看下面的例子。
【例11.4】 創建一個商品零售表,然后為該表按照銷售編號和銷售日期的組合創建3個分區,代碼及運行結果如下(實例位置:光盤\TM\sl\11\2)。
SQL> create table ware_retail_part2 --創建一個描述商品零售的數據表
2 (
3 id integer primary key, --銷售編號
4 retail_date date, --銷售日期
5 ware_name varchar2(50) --商品名稱
6 )
7 partition by range(id,retail_date) --按照銷售序號和銷售日期分區
8 (
9 --第一個分區par_01
10 partition par_01 values less than(10000,to_date('2011-12-01','yyyy-mm-dd')) tablespace TBSP_1,
11 --第一個分區par_02
12 partition par_02 values less than(20000,to_date('2012-12-01','yyyy-mm-dd')) tablespace TBSP_1,
13 --第一個分區par_03
14 partition par_03 values less than(maxvalue,maxvalue) tablespace TBSP_2 15 );
表已創建。
在上面的例子中,partition by range(id,retail_date)作為分區方法,id和retail_date作為分區鍵,即按銷售編號和銷售日期的組合來進行區分。語句“partition par_01 values less than(10000,to_date('2011-12- 01', 'yyyy-mm-dd')) tablespace TBSP_1”表示一個分區的定義,當插入記錄的銷售日期小于2011年12月1日,并且銷售編號小于10000時,則將該記錄劃為分區par_01并存放在TBSP_1表空間上。
11.2.2 散列分區
HASH分區,也叫做散列分區,是在列的取值難以確定的情況下采用的分區方法。比如,按照身份證號進行分區,就很難確定身份證號的分區范圍。HASH實際上是一種函數算法,當向表中插入數據時,系統會自動根據當前分區列的值計算出HASH值,然后確定應該將該行存放于哪個表空間中。
HASH分區通過指定分區編號將數據均勻分布在磁盤設備上,使得這些分區大小一致,這充分降低了I/O磁盤爭用的情況,但是該分區方法對于范圍查詢或不等式查詢起不到優化的作用。
一般來說,下面幾種情況可以采用HASH分區。
? HASH分區可以由HASH鍵來分布。
? DBA無法獲知具體的數據值。
? 數據的分布由Oracle處理。
? 每個分區有自己的表空間。
下面通過幾個示例來演示如何創建散列分區。
【例11.5】 創建一個商品零售表,然后將該表id列的值根據自身情況散列地存放在指定的兩個表空間中,代碼及運行結果如下(實例位置:光盤\TM\sl\11\3)。
……