本书从初学者的角度出发, 以通俗易懂的语言, 丰富多彩的实例, 详细介绍了使用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)。
……