版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章 ORACLE數(shù)據(jù)庫對象表 .1 ORACLE表和數(shù)據(jù)類型第四講 Oracle數(shù)據(jù)表 .2 DUAL表.3 常規(guī)表(堆表)(Normal Table).5 索引組織表(Index Organized Table IOT).6 對象表(Object Table).7 嵌套表(Nested Table).8 其他表.4 分區(qū)表(Partitions Table) 重點 掌握各種類型表的創(chuàng)建方法 了解常規(guī)表、分區(qū)表、索引組織表和對象表的物理組織方式及其特點 了解各種表的運用場所 .1 ORACLE表和數(shù)據(jù)類型 表是數(shù)據(jù)庫數(shù)據(jù)存儲的根本單元,它對應于顯示世界中的對象(部門和雇員等)。當進展數(shù)據(jù)庫
2、設計時,需求構造E-R圖,在將E-R圖轉變?yōu)閿?shù)據(jù)庫對象時,實體最終要轉換為數(shù)據(jù)庫表。.1.1 ORACLE表簡介BOSTONOPERATIONS40CHICAGOSALES30DALLASRESEARCH20NEW YORKACCOUNTING10LOCDNAMEDEPTNO 表中存儲的數(shù)據(jù)的邏輯構造是一張由行列組成的二維表。表中的一行又叫一條記錄,或一個元組。一條記錄描畫一個實體;一列描畫實體的屬性,如部門有部門代碼、部門稱號、位置等屬性,每個列還具有列名、數(shù)據(jù)類型、長度、約束條件、默許值等等。 ROWID是表的偽列, ROWID給出了表行的物理位置,用來獨一的標識表行。是定位表行最快的方式
3、,它與其他列一樣可以直接查詢。ROWID在數(shù)據(jù)文件中其數(shù)據(jù)是掩碼格式存放,所以普通用戶不能直接讀懂它的內容。而必需用包DBMS_ROWID進展轉換。 .1.2 ORACLE數(shù)據(jù)行的物理標識rowid.1 ORACLE表和數(shù)據(jù)類型select deptno,dname,rowid from scott.dept;select deptno,dname,rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(row
4、id) row#from scott.dept; 為DEPT表的DEPTNO建立索引,分析數(shù)據(jù)庫是如何存儲索引信息的?如何利用索引來加快查找速度的?用戶表空間DEPTROWIDDEPTNO其他列rowid110CHICAGOG1rowid230NEW YORKG1rowid340DALLASG2rowid420BOSTONG2構成索引列表rowid340rowid230rowid420rowid110INDEX_DEPTNO索引表空間Select * from dept Where deptno=20最大長度4000 chars 根據(jù)字符集而定的可變長度字符串(以字符為單位) VARCHAR2
5、(n char ) 最大長度2000 chars 根據(jù)字符集而定的固定長度字符串(以字符為單位) CHAR(n char)可做索引的最大長度749 最大長度4000 bytes 可變長度的字符串 (以字節(jié)為單位)VARCHAR2 (n)最大長度2000 bytes 固定長度字符串 (以字節(jié)為單位)CHAR(n)其它闡明 限制條件 中文闡明 字段類型 字符型.1.3 ORACLE根本數(shù)據(jù)類型(PAGE40) .1 ORACLE表和數(shù)據(jù)類型 注解:由于char類型總是會用空格填充使之到達一個固定寬度,無論在是表段中還是索引段中,它都會占用很大的存儲空間。NUMBER(63),精度更高 實數(shù)類型 R
6、EAL NUMBER(38),雙精度 浮點數(shù)類型 FLOAT 小的整數(shù) NUMBER(38)整數(shù)類型 INTEGER /INTP為整數(shù)位,S為小數(shù)位 數(shù)字類型 DECIMAL(P,S) /NUMERIC(P,S)精度13位;范圍-10308.25-10308.25在內存中占9個字節(jié)雙精度浮點數(shù)類型BINARY_DOUBLE精度6位;范圍-1038.53-1038.53 ;在內存中占5個字節(jié)單精度浮點數(shù)類型 BINARY_FLOATP為總位數(shù),S為小數(shù)位; 精度P=0 s=0; 當number0 s=1 .1 ORACLE表和數(shù)據(jù)類型 注解:number可以很準確的存儲數(shù)值 ;假設對科學數(shù)據(jù)執(zhí)行
7、數(shù)據(jù)發(fā)掘或進展復雜的數(shù)值分析,精度損失往往是可以接受的,運用binary_float、binary_double能夠會得到非常顯著的性能提升。字段類型 中文說明 限制條件 DATE(1)固定日期/時間格式;(2)7字節(jié)寬度描述世紀、年、月、日、時、分、秒7個屬性;(3)使用DUMP函數(shù),可查看實際存儲 。默認格式DD-MM-YY(HH-MI-SS),可以通過修改nls_language 和nls_date_format 兩個參數(shù)來更改日期的顯示。TIMESTAMP(n)(1)與DATE類似;存儲方式與DATE相同;(2)支持小數(shù)秒N的取值為09INTERVAL時間量.1 ORACLE表和數(shù)據(jù)類
8、型 日期時間型.1.3 ORACLE根本數(shù)據(jù)類型 注解:date類型世紀和年份采用一種“加100表示法來存儲。月和日采用自然的存儲方式。時、分、秒采用“加1表示法存儲。.1 ORACLE表和數(shù)據(jù)類型 其他數(shù)據(jù)型.1.3 ORACLE根本數(shù)據(jù)類型 最大長度4000 bytes 二進制數(shù)據(jù)表中記錄的獨一行號 NROWID 10 bytes *.*.*格式,*為0或1 數(shù)據(jù)表中記錄的獨一行號 ROWID 最大長度4G 存放在數(shù)據(jù)庫外的二進制數(shù)據(jù) BFILE 最大長度4G 根據(jù)字符集而定的字符數(shù)據(jù) NCLOB 最大長度4G 字符數(shù)據(jù) CLOB 最大長度4G 二進制數(shù)據(jù) BLOB 最大長度2G 可變長度
9、的二進制數(shù)據(jù) LONG RAW 最大長度2000 bytes 固定長度的二進制數(shù)據(jù) RAW 最大長度2G231-1 超長字符串 LONG .2 DUAL表 DUAL表屬于SYS方式,它在數(shù)據(jù)字典創(chuàng)建時自動建立。DUAL表只需一列和一行,列名為dummy。由于ORACLE中大部分操作都必需在表中,如對一個代數(shù)表達式求值,可以在該表上運用SELECT命令計算一個常量表達式。 DUAL表在此充任了那些表達式的包羅萬象的容器。SQL ServerClientSome QueryResults dummydual.3常規(guī)表(Normal Table)創(chuàng)建常規(guī)表的方法和過程3創(chuàng)建常規(guī)表前預備任務2常規(guī)表及
10、其特征1DDLTABLESPACE數(shù)據(jù)定義命令usersTABLE1表構造的查看與維護4 常規(guī)表及其特征1.3常規(guī)表(Normal Table) 常規(guī)表又叫做堆組織表heap,它是一個無序行集合,并不是以某種特定的順序來存儲數(shù)據(jù)。 堆是計算機領域中深化研討的一種經典的數(shù)據(jù)構造,它的特點是會將數(shù)據(jù)放在最適宜的地方,而不是按照某種特定順序來放置。Example:建立一個測試表t,數(shù)據(jù)庫中的每個數(shù)據(jù)塊剛好能放一個整行數(shù)據(jù)庫塊是8KB),向表中插入多條記錄,驗證記錄存儲的無序性。根據(jù)數(shù)據(jù)需求分析設計數(shù)據(jù)庫表的方式,應該運用范式來規(guī)劃每個表。定義表列時,應選擇適宜的數(shù)據(jù)類型和長度。確定表中所需求的完好性
11、約束。規(guī)劃表的位置,將表部署在特定的表空間上(USERS表空間)。估計和規(guī)劃表的大小。在oracle10G中,經過OEM Database control估算表大小。用戶與權限問題。(CREATE ANY TABLE、 CREATE TABLE、UNLIMITED TABLESPACE).3常規(guī)表(Normal Table)創(chuàng)建常規(guī)表前預備任務2.3常規(guī)表(Normal Table)report_card學生成果管理數(shù)據(jù)庫deptcoursestudent實 例:學生成果管理工程數(shù)據(jù)庫設計dept字段名注釋類型長度備注dept_no部門編號varchar28PKdept_name部門名稱var
12、char240dept_mng部門經理varchar28address地址varchar280cont部門人數(shù)numberstudent字段名注釋類型長度備注student_no學號varchar212PKstudent_name姓名varchar210dept_no部門編號varchar28FKsex性別varchar21CKtype學生類型varchar21CKhiredate入學日期dateprovince籍貫varchar220empid身份證號varchar225address詳細地址varchar260borndate出生日期datespeciality所學專業(yè)varchar220
13、nation民族varchar220htelno電話Varchar220money繳費總計Number(10,2)remarks備注Varchar280course字段名注釋類型長度備注course_no課程號varchar28PKcourse_name課程名稱varchar240grade開設年級varchar28period學時數(shù)numberreport_card字段名注釋類型長度備注student_no學號varchar212FKcourse_no課程號varchar28FKterm學期varchar28result成績number(5,2)remark備注varchar280.3常規(guī)表
14、(Normal Table)創(chuàng)建常規(guī)表的方法和過程3 運用Create Table腳本在SQL Plus環(huán)境中實現(xiàn)。 運用OEM控制臺經過圖形界面創(chuàng)建表構造。 在原來已有表的根底上建立新表。.3常規(guī)表(Normal Table)運用Create Table腳本創(chuàng)建常規(guī)表 Create table schema.table_name(列名1 類型長度 列約束 , 列名2 類型長度 列約束,表約束)Pctfree n Pctused nInitrans nMaxtrans nTablespace tablespace_nameStorage ( Initial n Next n Pctincrea
15、se n Minextents n Maxextents n)指定表的每一個數(shù)據(jù)塊為Update操作所保管的空間百分比,默許10指定在數(shù)據(jù)塊上可以重新插入數(shù)據(jù)的已用空間最低百分比。 指定可同時對表一切塊進展更新操作的最小和最大的事務數(shù)將所創(chuàng)建的表部署到規(guī)定的表空間中指定表第一個區(qū)的大小。指定初始擴展區(qū)的大小.指定擴展區(qū)遞增的百分比。 NEXT=(1+n/100*Old_next指定為表段分配的區(qū)數(shù)的最小值和最大值。Create table test(a number)storage( initial 100K next 100K minextents 2 maxextents 100 pcti
16、ncrease 100); .3常規(guī)表(Normal Table) 例如 : 以新用戶zhang登錄,在方案zhang下創(chuàng)建學生成果管理工程四個表。zhangCREATE TABLE ZHANG.dept (DEPT_NO varchar2(8), DEPT_NAME varchar2(40), DEPT_MNG varchar2(8), ADDRESS varchar2(80), CONT number, PRIMARY KEY (DEPT_NO) ) pctfree 20 pctused 50 tablespace users storage( initial 100k next 100k
17、 minextents 2 maxextents 100 pctincrease 0) ;運用OEM創(chuàng)建常規(guī)表 .3常規(guī)表(Normal Table) 例如 :創(chuàng)建學生根本信息表student,包含student_no等15個字段。其中student_no為主鍵;student_name非空;dept_no參照與表dept中的dept_no的取值; type取值僅為1、2、3;sex取值只能為0或1。 該表的表空間為users,保管用于更新的空閑空間的百分比為10%,并發(fā)事務個數(shù)初始值為2個,最多并發(fā)255個事務。 為表分配的區(qū)最少為2個,最多為20個,第一個區(qū)大小為64K,第一個擴展區(qū)的大小
18、為64K,隨著數(shù)據(jù)量的添加新分配的區(qū)相對于上一個區(qū)增長50%. 經過Create table.as select. 語句(Create table嵌套子查詢,簡稱CTAS) ,可以基于原有的表或視圖來創(chuàng)建新表,而不用逐個定義列。當新表與原表構造類似或者新表需求運用原表中大量數(shù)據(jù)時很有必要采用這種方式。.3常規(guī)表(Normal Table)CTAS方法建立常規(guī)表語法一: create table NOLOGGING as select from table_old where condition;語法二: create table NOLOGGING as select from table_o
19、ld where 1=2; 建議運用NOLOGGING選項。假設不運用這個選項,那么每插入一條記錄都將會產生重做日志信息,占用了空間和時間。留意: 不能修正列的數(shù)據(jù)類型和長度,新表中的數(shù)據(jù)類型和長度都必需和查詢中的一致。 SELECT語句中不能包含大對象數(shù)據(jù)類型和LONG數(shù)據(jù)類型。 約束性條件和列的默許值定義都不會被復制。 建議運用NOLOGGING選項。假設不運用這個選項,那么每插入一條記錄都將會產生重做日志信息,占用了空間和時間。.3常規(guī)表(Normal Table)CTAS方法建立常規(guī)表.3常規(guī)表(Normal Table)表構造的查看與維護4 查看表構造 修正表構造刪除表構造可經過數(shù)據(jù)
20、字典dba_tables、all_tables、user_tables查看表的定義信息 如: SELECT owner,tablespace_name, pct_free,pct_used, initial_extent,next_extent,min_extents,max_extents FROM dba_tables WHERE table_name=STUDENT;可經過查詢數(shù)據(jù)字典dba_tab_columns、dba_constraints查看表的字段信息與約束信息。經過SQL命令修正表的語法格式如下所示:ALTER TABLE schema. table_name RENAME
21、TO NewTablename ADD col_name datatype DEFAULT expression col_constraint MODIFY col_name datatype DEFAULT expression col_constraint DROP COLUMN col_name (col_name1,col_name2) SET UNUSED COLUMN col_name DROP UNUSED COLUMN STORAGE 子句; 查看表構造 修正表構造 刪除表構造運用rename to 子句修正表名運用ADD、MODIFY和DROP子句來修正列定義運用STORAG
22、E子句來修正存儲參數(shù)及區(qū)分配參數(shù)刪除表的構造: Drop table schema.tablename cascade constraints purge 備注:不僅會刪除了表中的數(shù)據(jù),還會刪除表構造。這條命令是不能回退的,所以,刪除表的時候應格外小心?;謴捅粍h除表: FLASHBACK TABLE schema.tablename TO BEFORE DROP 各類分區(qū)表的創(chuàng)建和運用3分區(qū)表的定義和類型2引入分區(qū)表的目的14.4 分區(qū)表(Partitions Table)分區(qū)表的維護4訪問一季度數(shù)據(jù) 一季度數(shù)據(jù)二季度數(shù)據(jù)三季度數(shù)據(jù)四季度數(shù)據(jù)P1 分區(qū)段P2分區(qū)段P3分區(qū)段P4分區(qū)段10G4.
23、4 分區(qū)表(Partitions Table)2003年Sales表段 假設一張銷售表SALES年數(shù)據(jù)總量到達10G,每個季度平均2.5G。如今執(zhí)行一條SQL語句訪問SALES表中的第一季度銷售總額。這時候效力器進程會對SALES表進展全表掃描。假設我們運用分區(qū)表把四個季度的數(shù)據(jù)分別存放到不同的分區(qū)中,當統(tǒng)計某一季度銷售數(shù)據(jù)只需求掃描2.5G數(shù)據(jù),提高I/O性能。引入分區(qū)表的目的1引入分區(qū)表的目的12.5Goracle允許用戶將一個表分成多個分區(qū)用戶可以只訪問表中的特定分區(qū),防止全表掃描,降低磁盤I/O,提高訪問性能將不同的分區(qū)存儲在不同的磁盤,平衡分布I/O,提高訪問性能可以獨立地備份和恢復
24、每個分區(qū),提高系統(tǒng)強壯性、可靠性及可用性4.4 分區(qū)表(Partitions Table) 分區(qū)是一種方法,它將一個大表從邏輯上根據(jù)某些條件把數(shù)據(jù)分成假設干個較小的且更容易管理的區(qū)分區(qū)段(表)。 分區(qū)表是一種特殊的常規(guī)表。按照分區(qū)的方式可將分區(qū)表分為: 范圍分區(qū)Range Partitioning 散列分區(qū)Hash Partitioning 列表分區(qū)List Partitioning 復合分區(qū)( Composite Partitioning) -復合范圍-散列分區(qū)( Composite Range-Hash Partitioning) -復合范圍-列表分區(qū)( Composite Range-L
25、ist Partitioning)分區(qū)表的定義和類型2分區(qū)表的定義和類型2各類分區(qū)表的創(chuàng)建和運用3各類分區(qū)表的創(chuàng)建和運用34.4 分區(qū)表(Partitions Table) 范圍分區(qū) Range Partitioning 根據(jù)表中某一列值的范圍(通常是基于時間的范圍),將表中的行映射到各個分區(qū)。 適用場所: 當數(shù)據(jù)量較大且跨時間范圍均勻分布數(shù)據(jù)時,非常適宜于創(chuàng)建范圍分區(qū)表,這時的表性能是最正確的。 范圍分區(qū)例如: 假設一張銷售表SALEScustomer_id銷售單號、sales_amount銷售額、sales_date銷售日期年數(shù)據(jù)總量到達10G,每個季度平均2.5G。創(chuàng)建范圍分區(qū)表,將一、
26、二、三、四季度的銷售數(shù)據(jù)存放到不同分區(qū)段p1,p2,p3,p4中。 操作: 1范圍分區(qū)表的創(chuàng)建:OEM實現(xiàn)、SQL腳本實現(xiàn)。 2查看范圍分區(qū)表的分區(qū)情況 3運用范圍分區(qū)表范圍分區(qū) Range PartitioningSALES范圍分區(qū)表的創(chuàng)建:CREATE TABLE sales(customer_id number(3), sales_amount number(10,2) , sales_date DATE)PARTITION BY RANGE(sales_date)( PARTITION p1 VALUES LESS THAN (01-APR-2003) TABLESPACE users
27、, PARTITION p2 VALUES LESS THAN (01-JUL-2003) TABLESPACE users, PARTITION p3 VALUES LESS THAN (01-OCT-2003) TABLESPACE users, PARTITION p4 VALUES LESS THAN (01-JAN-2004) TABLESPACE users);步驟一:創(chuàng)建分區(qū)表SALES1OEM方式創(chuàng)建2命令方式創(chuàng)建范圍分區(qū)的語法:PARTITION BY RANGE (column_name)( PARTITION part1 VALUE LESS THAN(range1) T
28、ABLESPACE tablespace_name, PARTITION part2 VALUE LESS THAN(range2), TABLESPACE tablespace_name, . PARTITION partN VALUE LESSTHAN(MAXVALUE) );根據(jù)該列創(chuàng)建分區(qū)分區(qū)的稱號該分區(qū)包含低于range1值 的數(shù)據(jù)信息,并將該分區(qū)部署到相應的表空間范圍分區(qū) Range Partitioning范圍分區(qū)表SALES的創(chuàng)建: create table zhang.sales(customer_id number(3), sales_amount number(10,2)
29、, sales_date DATE) PARTITION BY RANGE(sales_date) ( PARTITION p1 VALUES LESS THAN (01-APR-2003), PARTITION p2 VALUES LESS THAN (01-JUL-2003), PARTITION p3 VALUES LESS THAN (01-OCT-2003), PARTITION p4 VALUES LESS THAN (01-JAN-2004);SQL腳本創(chuàng)建sales表:步驟二:查看和運用分區(qū)表SALES 1經過OEM或者查詢數(shù)據(jù)字典視圖user_segments, 查看分區(qū)段信
30、息。SQL COL segment_name format a10;SQL SELECT tablespace_name,segment_name,partition_name FROM user_segments WHERE segment_name=SALES;2當在分區(qū)表上執(zhí)行DML操作時,ORACLE會根據(jù)分區(qū)列值的范圍在相應的分區(qū)上執(zhí)行操作(T10.SQL)SQL insert into sales values(1,28500,25-JAN-2003);SQL select * from sales 全表掃描 where sales_date=to_date(25-JAN-2003
31、,dd-mon-yyyy);SQLselect * from sales partition(p1) 分區(qū)掃描 where sales_date=to_date(25-JAN-2003,dd-mon-yyyy); 范圍分區(qū) Range Partitioning各類分區(qū)表的創(chuàng)建和運用3各類分區(qū)表的創(chuàng)建和運用3 散列(哈希)分區(qū)Hash Partitioning 散列分區(qū)是指按照ORACLE所提供的散列HASH函數(shù),計算列值數(shù)據(jù),并最終按照函數(shù)結果將數(shù)據(jù)均勻的部署在不同的分區(qū)中。 適用場所: 不符合時間范圍分區(qū)且需求均勻分布數(shù)據(jù)的場所。4.4 分區(qū)表(Partitions Table) 散列分區(qū)例
32、如: 創(chuàng)建一張產品編碼表PRODUCT(product_id產品編號,description 產品稱號),將產品編碼的信息均勻的部署在兩個不同的邏輯分區(qū)上,插入例如數(shù)據(jù)進展驗證。 操作: 1散列分區(qū)表的創(chuàng)建:OEM實現(xiàn)、SQL腳本實現(xiàn)。 2查看散列分區(qū)表的分區(qū)情況 3運用散列分區(qū)表散列(哈希)分區(qū)Hash Partitioning創(chuàng)建散列分區(qū)表product1OEM方式創(chuàng)建PARTITION BY HASH (column_name) ( PARTITION part1 TABLESPACE tbs1, PARTITION part2 TABLESPACE tbs2, . PARTITION
33、partN TABLESPACE tbsN);散列(哈希)分區(qū)Hash Partitioning2命令方式創(chuàng)建 根據(jù)該列創(chuàng)建分區(qū)分區(qū)的稱號將各個分區(qū)部署到指定的表空間散列分區(qū)表product的創(chuàng)建: create table duct (product_id number(6), description varchar2(30) PARTITION BY HASH(product_id) ( PARTITION p1 tablespace users, PARTITION p2 tablespace users );1經過OEM或者查詢數(shù)據(jù)字典視圖user_segments,
34、 查看分區(qū)段信息。SQL COL segment_name format a10;SQL SELECT tablespace_name,segment_name,partition_name FROM user_segments WHERE segment_name=PROCUDT;2插入例如數(shù)據(jù)T11.sql,察看數(shù)據(jù)的分布。散列(哈希)分區(qū)Hash Partitioning查看和運用散列分區(qū)表product各類分區(qū)表的創(chuàng)建和運用3各類分區(qū)表的創(chuàng)建和運用3列表分區(qū)list Partitioning 列表分區(qū)是專門用于數(shù)據(jù)建模的離散值分布的一種分區(qū)方式,它可以將離散數(shù)據(jù)如城市、地域有效的部署到
35、不同的分區(qū)中。 適用場所: 大型表中有一些關于城市、地域或類似的屬性值且大部分運用基于不同的地域或城市來進展的情況下。 4.4 分區(qū)表(Partitions Table) 列表分區(qū)例如: 某公司在全國北京、上海、重慶、廣州、南京、武漢六個地域均有銷售點經常需求以地理位置統(tǒng)計銷售數(shù)據(jù),比如統(tǒng)計上海的銷售數(shù)據(jù),統(tǒng)計北京的銷售數(shù)據(jù)等等。由于數(shù)據(jù)量大,公司建議將數(shù)據(jù)存儲在不同的分區(qū)上,防止查找信息的時候掃描全表添加開銷。根據(jù)以上要求為該公司建立銷售數(shù)據(jù)表SALES_BY_REGION (deptno 部門編號,dname部門稱號, quantity_sales 銷售數(shù)量,city部門所在城市。列表分區(qū)
36、List Partitioning創(chuàng)建散列分區(qū)表SALES_BY_REGION1OEM方式創(chuàng)建列表分區(qū) List Partitioning2命令方式創(chuàng)建PARTITION BY LIST (column_name)( PARTITION part1 VALUES (values_list1), PARTITION part2 VALUES (values_list2), . PARTITION partN VALUES (DEFAULT);根據(jù)該列(離散值如地理位置)創(chuàng)建的列表分區(qū)分區(qū)的稱號包含values_list1值的記錄列表分區(qū)sales_by_region的創(chuàng)建: create tab
37、le sales_by_region (deptno number, dname varchar2(20), quantity_sales number(10,2), city varchar2(10) ) PARTITION BY LIST (city) ( PARTITION p1 VALUES(北京,上海), PARTITION p2 VALUES(重慶,廣州), PARTITION p3 VALUES(南京,武漢) );各類分區(qū)表的創(chuàng)建和運用3各類分區(qū)表的創(chuàng)建和運用3復合分區(qū) Composite Partitioning 組合范圍-散列分區(qū)( Composite Range-Hash
38、Partitioning) 首先用范圍分區(qū)對表進展分區(qū),然后運用散列方式將每個分區(qū)再分區(qū)。該分區(qū)方式既具有范圍分區(qū)良好的邏輯管理性,還提供了散列分區(qū)均勻分布數(shù)據(jù)的優(yōu)勢。4.4 分區(qū)表(Partitions Table) 某公司的銷售單表sales_order包含銷單編號order_id、銷售日期order_date、產品編號procduct_id和數(shù)量quantity四個字段,但是該表按照邏輯范圍分區(qū)后,不同范圍的數(shù)據(jù)分布不均勻,試經過范圍/散列基于order_id組合分區(qū)有效的部署銷售單表的數(shù)據(jù)。組合范圍-散列分區(qū)( Composite Range-Hash Partitioning)例如c
39、reate table sales_order(order_id number,order_date date, product_id number,quantity number)PARTITION BY RANGE (order_date)SUBPARTITION BY HASH(order_id) SUBPARTITIONS 2 ( PARTITION p1 VALUES LESS THAN(01-APR-2001), PARTITION p2 VALUES LESS THAN(01-JUN-2001), PARTITION p3 VALUES LESS THAN(01-OCT-2001
40、), PARTITION p4 VALUES LESS THAN(01-JAN-2002);創(chuàng)建的四個范圍分區(qū)的稱號在表的 order_date 列中創(chuàng)建范圍分區(qū)在每個范圍分區(qū)中創(chuàng)建 2 個散列子分區(qū)各類分區(qū)表的創(chuàng)建和運用3各類分區(qū)表的創(chuàng)建和運用3復合分區(qū) Composite Partitioning 組合范圍-列表分區(qū)( Composite Range-Hash Partitioning)組合范圍-列表分區(qū)( Composite Range-List Partitioning) 首先用范圍分區(qū)對表進展分區(qū),然后用列表分區(qū)的方法將每個分區(qū)再進展分區(qū)。用戶既可以按照時間范圍來訪問數(shù)據(jù)在分區(qū)內訪問
41、 ,也可以按照指定地理位置來訪問數(shù)據(jù)在子分區(qū)內 ,經過減少訪問的數(shù)據(jù)量,來進一步提高訪問的性能。 組合范圍-列表分區(qū)( Composite Range-Hash Partitioning)例如創(chuàng)建組合范圍-列表分區(qū)表 create table sales_region ( deptno number,sale_date date, sale_amount number,city varchar2(10) ) PARTITION BY RANGE (sale_date) SUBPARTITION BY LIST (CITY) ( PARTITION r1_2003 VALUES LESS THA
42、N (to_date(1-JUL-2003,DD-MON-YYYY) TABLESPACE users( SUBPARTITION r1_2003_1 VALUES(北京,上海), SUBPARTITION r1_2003_2 VALUES(重慶,廣州), SUBPARTITION r1_2003_3 VALUES(南京,武漢), PARTITION r2_2003 VALUES LESS THAN (to_date(1-JAN-2004,DD-MON-YYYY) TABLESPACE users( SUBPARTITION r2_2003_1 VALUES(北京,上海), SUBPARTIT
43、ION r2_2003_2 VALUES(重慶,廣州), SUBPARTITION r2_2003_3 VALUES(南京,武漢) );分區(qū)表的維護4分區(qū)表的維護44.4 分區(qū)表(Partitions Table)語法格式:ALTER TABLE 表名 ADD PARTITION 分區(qū)名; 例 : 在散列分區(qū)表product尾部添加分區(qū)p3。 ALTER TABLE product ADD PARTITION p3 tablespace users;添加分區(qū)語法格式:ALTER TABLE 表名 SPLIT PARTITION 分區(qū)名 AT(分區(qū)列值) INTO( PARTITION 子分區(qū)1
44、, PARTITION 子分區(qū)2); 例:在范圍分區(qū)表sales的中間添加分區(qū); ALTER TABLE sales SPLIT PARTITION p3 AT (01-AUG-2003) INTO (PARTITION p3_1,PARTITION p3_2);分割分區(qū)語法格式:ALTER TABLE 表名 MERGE PARTITION 子分區(qū)名 INTO PARTITION 分區(qū)名; 例:將sales表分區(qū)p3_1,p3_2合并成一個分區(qū)p3。 ALTER TABLE sales MERGE PARTITIONS p3_1,p3_2 INTO PARTITION p3;合并分區(qū)語法格式:
45、ALTER TABLE 表名 RENAME PARTITION 舊名 TO 新名;例:將sales表分區(qū)p3更名為p3_1。 ALTER TABLE sales RENAME PARTITION p3 TO p3_1; 重命名分區(qū)語法格式1:ALTER TABLE 表名 DROP PARTITION 分區(qū)名;語法格式2:ALTER TABLE 表名 TRUNCATE PARTITION 分區(qū)名;例:將sales表分區(qū)p3_1 中的數(shù)據(jù)刪除掉。刪除分區(qū)語法格式1:ALTER TABLE 分區(qū)表 EXCHANGE PARTITION 分區(qū)名 WITH TABLE 常規(guī)表 例:將sales表p1分區(qū)
46、中的數(shù)據(jù)導入到同構造的常規(guī)表sales_1表中;模擬缺點刪除P1分區(qū)中的數(shù)據(jù),然后將sales_1表中的數(shù)據(jù)還原到sales表的p1區(qū)中.交換分區(qū)分區(qū)維護操作有: 添加分區(qū) 拆分分區(qū) 合并分區(qū) 重命名分區(qū) 刪除分區(qū) 交換分區(qū)1234564.4 分區(qū)表(Partitions Table)分區(qū)表小結5分區(qū)表小結5表分區(qū) 為了簡化數(shù)據(jù)庫大表的管理,例如在數(shù)據(jù)倉庫中普通都是TB 級的數(shù)量級。Oracle 8以后推出了分區(qū)選項,分區(qū)將表分別在假設干不同的表空間上,用分而治之的方法來支撐無限膨脹的大表,提高大表在物理一級的可管理性。將大表分割成較小的分區(qū)可以改善表的維護、備份、恢復、事務及查詢性能。分區(qū)的
47、優(yōu)點1. 加強可用性 2. 減少封鎖時間 3. 維護輕松4. 平衡I/O 5. 改善性能 6. 分區(qū)對用戶透明索引組織表與常規(guī)表的運用比較3創(chuàng)建索引組織表2索引組織表及特征1索引組織表的優(yōu)勢分析44.5 索引組織表(Index Organized Table IOT) 葉子數(shù)據(jù)塊中存儲以排好序的索引主鍵以及記錄對應的物理地址rowid,根據(jù)rowid定位記錄。 4.5 索引組織表(Index Organized Table IOT)索引組織表及特征1索引組織表及特征1建立B樹索引 數(shù)據(jù)是按照主鍵順序存放在葉子數(shù)據(jù)塊中。找到主鍵也就找到完好的數(shù)據(jù)記錄。 索引組織表擁有索引和表兩者的特征。索引組織
48、表是以B-樹索引構造存儲數(shù)據(jù)的表, 它將表的數(shù)據(jù)非主鍵列和索引字段主鍵列一同存儲在索引段中。因此找到記錄的主鍵也就找到了相應記錄的完好內容。 索引組織表的缺陷:數(shù)據(jù)塊中的數(shù)據(jù)會隨著記錄的插入、刪除等操作在數(shù)據(jù)塊之間挪動,因此而產生開銷,適用于OLAP,不適用OLTP.1.5051.100101.15010000.100500.1011.1920.2542.5051.5859.6364.7598.1001,rowid2,rowid3,rowid10,rowid11,rowid12,rowid13,rowid19,rowid10021,rowid10022,rowid10023,rowid1002
49、8,rowid10046,rowid10047,rowid10048,rowid10050,rowid10000.1000910010.1002010021.1002810046.10050100501004910048975431備注價錢規(guī)格稱號產品編碼4.5 索引組織表(Index Organized Table IOT)創(chuàng)建索引組織表2創(chuàng)建索引組織表2 建立索引組織表的關鍵 建表的同時必需定義主鍵。創(chuàng)建索引組織表EMP_WORK,包括員工編號empno varchar2(8), 任務日期work_date兩個字段,并檢查能否創(chuàng)建勝利。create table emp_work (empn
50、o varchar2(8), work_date date, constraint pk_ew primary key(empno,work_date) organization index;測試索引組織表物理存儲的有序性t15.sql。4.5 索引組織表(Index Organized Table IOT)索引組織表與常規(guī)表的運用比較3索引組織表與常規(guī)表的運用比較3 例: 假設每個員工都有34個或者更多的地址詳細記錄,但是這些詳細記錄是隨機到來的。創(chuàng)建員工詳細地址表包括員工編號empno,地址類型addr_type,街道street,城市city,州state,郵政編碼zip,主鍵為(emp
51、no,addr_type)。要求:將同一員工的地址信息盡量存儲在一樣的或臨近的數(shù)據(jù)塊上,以便在反復獲取記錄時,減少系統(tǒng)訪問的任務量. 分析:由于員工的地址信息是隨機到來的,那么同一員工的各個地址存放在同一個數(shù)據(jù)塊或臨近數(shù)據(jù)庫塊上概率根本接近于0,但是我們在執(zhí)行SQL操作的時候又希望總是把一切地址詳細記錄都取出來。因此,建議對該地址表運用IOT表,每插入一個員工地址,都會根據(jù)索引主鍵將記錄插入與該員工其他地址相互“接近的地方,這樣在反復獲取記錄時,可以減少任務量。10002workRT streetbostonAD 32334empnoAddr_typestreetcitystatezip100
52、01homeADT streetchicagoAC 6544310001workmain street Washington DC 2013210002homemain street Washington OP 3828210002workRT streetbostonAD 3233410001homeADT streetchicagoAC 6544310001workmain street Washington DC 2013210002homemain street Washington OP 38282將地址表實現(xiàn)為常規(guī)表,數(shù)據(jù)的詳細存儲將地址表實現(xiàn)為索引組織表,數(shù)據(jù)的詳細存儲10002
53、workRT streetbostonAD 32334empnoAddr_typestreetcitystatezip10001homeADT streetchicagoAC 6544310001workmain street Washington DC 2013210002homemain street Washington OP 3828210002workRT streetbostonAD 3233410001workMain streetWashingtonDC 2013210001homeADT street chicago AC 6544310002homemain street
54、Washington OP 3828210001workmain street Washington DC 2013210002homemain street Washington OP 382824.5 索引組織表(Index Organized Table IOT) 1、將EMP表設置為主表,EMPNO為其主關鍵字。將其子表員工的詳細地址表,用堆組織表和索引組織表的方式實現(xiàn)兩次。 創(chuàng)建EMP表并填充測試數(shù)據(jù); 將員工詳細地址表創(chuàng)建為索引組織表iot_addresses; 將員工詳細地址表創(chuàng)建為堆組織表heap_addresses; 2、分別向heap_addresses、iot_addre
55、sses表中插入大量例如數(shù)據(jù)。 3、啟用SQL TRACE工具查看以下兩條SQL語句的CPU運用情況。 select * from emp,heap_addresses where emp.empno=heap_addresses.empno and emp.empno=42; select * from emp,iot_addresses where emp.empno=iot_addresses.empno and emp.empno=42; 運用索引組織表可快速準確地進展匹配查找或根據(jù)主關鍵字在一定范圍內的查詢。一旦找到鍵值,在該位置中也找到其他數(shù)據(jù)。這樣消除了頻繁的I/O操作。 最適宜
56、數(shù)據(jù)庫24x7形狀下的表構造,當數(shù)據(jù)庫必需堅持隨時聯(lián)機形狀時,可聯(lián)機重新組織IOT,無需重建其輔助索引。 減少了存儲需求。關鍵字列與表和索引并不反復,也不需求額外存儲rowid。當關鍵字列占據(jù)了一行的大部分時,可節(jié)省存儲空間。4.5 索引組織表(Index Organized Table IOT)索引組織表的優(yōu)勢分析4索引組織表的優(yōu)勢分析44.6 對象表(Object Table) 傳統(tǒng)關系型僅支持簡單數(shù)據(jù)類型;不支持數(shù)組、嵌套和遞歸的數(shù)據(jù)構造,給新型數(shù)據(jù)模型-面向對象的數(shù)據(jù)模型(OODBS)提供了運用背景。 目前,以關系數(shù)據(jù)庫和SQL為根底擴展關系模型以及對象關系數(shù)據(jù)庫(ORDBMS)的開展
57、滿足了許多運用需求。ORACLE、DB2 UDB、INFORMIX都推出ORDBMS, ANSI/ISO 發(fā)布的SQL-99規(guī)范是一個對象關系規(guī)范。姓名職務家屬關系姓名張家口職員妻子李小玫兒子張冠李柴米油經理妻子陸續(xù)琴郝成功職員妻子朱那亞兒子郝乃軍女兒郝佳欣employeeseidenameJobnamesex0001趙子龍男經理0002張翌德男職員0003孟可飛女職員對象表的引入1對象表的引入1例:create type namesex_type as object (name varchar2(8), sex varchar2(2);創(chuàng)建對象類型2創(chuàng)建對象類型2 一個對象類型由多個成員屬性
58、構成,ORACLE中對象類型由Create type語句創(chuàng)建,也可在OEM中創(chuàng)建。 create type 類型名 as object (字段1 類型長度, 字段2 類型長度; / SQL*plus中創(chuàng)建對象類型必需有/ 定義了一個對象構造器。 4.6 對象表(Object Table)employeeseidenameJobnamesex0001趙子龍男經理0002張翌德男職員0003孟可飛女職員 4.6 對象表(Object Table)基于對象類型創(chuàng)建對象表3基于對象類型創(chuàng)建對象表3create table employees (eid varchar2(4), ename namese
59、x_type, job varchar2(6);4.6 對象表(Object Table)操作對象表數(shù)據(jù)4操作對象表數(shù)據(jù)4 經過對象構造器為對象類型字段賦值 typename(屬性值) 稱為對象構造器 經過訪問對象字段的成員屬性,訪問成員值 表名. 對象屬性成員屬性 INSERT INTO employees VALUES(0001,namesex_type(趙子龍,男),經理); SELECT e.eid,,e.ename.sex FROM employees e WHERE e.job=經理; SELECT * FROM employees WHERE e.ename.sex=男;employeeseidenameJobnamesex0001趙子龍男經理0002張翌德男職員0003孟可飛女職員4.7嵌套表(Nested Table)嵌套表的運用*3創(chuàng)建嵌套表2嵌套表及特征1嵌套表及其特點嵌套表及其特點4.7嵌套表(Nested Table) 嵌套表nested table是oracle對象關系擴展的一部分,它和關系模型中傳統(tǒng)的“父/子表對中的子表很類似。這是數(shù)據(jù)元素的一個無序集合,一切的數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貨物運輸合同規(guī)定運輸方式與責任
- 2025年度歷史建筑保護拆墻工程合作協(xié)議4篇
- 2024豬場租賃承包合同
- 2024節(jié)能減排協(xié)議書
- 《中樞性高熱患者的護理與治療》課件
- 2025年度新媒體運營與公關合作服務合同范本4篇
- 2024年05月云南廣發(fā)銀行昆明分行招考筆試歷年參考題庫附帶答案詳解
- 2025年度大數(shù)據(jù)分析服務合同樣本8篇
- 2025變頻器代理商銷售合同:市場拓展與品牌推廣合作3篇
- 二零二五年度高端酒店集團食材供應與服務合同3篇
- 常見老年慢性病防治與護理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 設備機房出入登記表
- 六年級語文-文言文閱讀訓練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 零售學(第二版)第01章零售導論
- 大學植物生理學經典05植物光合作用
- 口袋妖怪白金光圖文攻略2周目
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標準
- 三年級下冊生字組詞(帶拼音)
評論
0/150
提交評論