1.分区表有什么优点?分区表有哪几类?如何选择用哪种类型的分区表?
当对表进行分区后,逻辑上是一张完整的表,只是将表中的数据在物理上可能存放到多个表空间或物理文件上。当查询数据时,不需要全表扫描。Oracle可以将大表或索引分成若干个更小、更方便管理的部分,每一部分称为一个分区,这样的表称为分区表。SQL语句使用分区表比全表能提供更好的数据处理与访问的性能。即便是个别分区不可用,其他分区仍然可用。,这称为分区独立性。
分区表的一些限制条件:
- 簇表不能进行分区
- 不能分割含有LONG 或LONG RAW列的表。
- 索引组织表不能进行范围分区。
(1)何时考虑分区?对大表进行分区,将有益于大表操作的性能和大表的数据的维护。官方说通常当表的大小超过2GB,或者对于OLTP系统,当表的记录超过1000万条时,都应考虑对表进行分区。
(2)分区表有什么优点?分区表有如下的优点:
1)增强可用性:如果表的一个分区由系统故障而不能使用,那么表的其余好的分区仍可用使用。
2)减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,可能比整个大表修复花的时间更少。
3)维护轻松:单管管理每个分区比管理单个大表要轻松得多。
4)均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O,改善性能。
5)改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快。
6)分区对用户透明,最终用户感觉不到分区的存在。
(3)有哪些类型的分区?如何选择用哪种类型的分区表?Oracle的分区可以分为:
1)范围分区(RANGE PARTITION)
2) 哈希分区(HASH PARTITION)
3) 列表分区(LIST PARTITION)
4)复合分区(组合分区)
5)INTERVAL分区(间隔分区)
6)系统分区
(1)RANGE(范围)分区 在如下几种情况下会使用到范围分区:
1)频繁地被一个时间范围谓词扫描。
2)维护一个时间滚动的数据窗口(Rolling Window Of Data)
3) 保存历史数据的表。
(2) HASH分区,HASH分区有如下的优点:
- 提高了大表的高可用和可管理性。
- 可以避免数据倾斜,将数据均匀地分布在多个物理设备上,最大化I/O吞吐量。
- 分区修剪和分区智能连接。
- 要求分区键高基数列。
- 分区修剪不支持基于分区字段的范围查询,只支持等值查询或IN-LIST查询。
下面几种情况用HASH分区比RANGE分区更好。
- 事先不知道需要将多少数据映射到给定范围的时候。
- 分区的范围大小很难确定,或者很难平衡的时候。
- Range分区使数据得到不期望的聚集时。
- 性能特性,如并行DML、分区修剪和分区连接很重要的时候。
(3) LIST(列表)分区 列表分区(LIST PARTITION)提供了一种按照字段的值来进行分区的方法,这种方法非常适合有高重复率字段值的表。
列表分区有如下特点:
- 列表值是离散的
- 列表值是无序的
- 分区键仅能包含一个列
- 列表值是低基数的
3.分区表常用数据字典视图有哪些?
Oracle分区表相关数据字典视图如下:
- 显示数据库所有分区表:DBA_PART_TABLES
- 显示表分区信息,显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS.
- 显示子分区信息,显示数据库所有复合分区表的子分区信息:DBA_TAB_SUBPARTITIONS
- 显示分区别,显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS
- 显示子分区列,显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS
4.普通表转换为分区表有哪些办法?
将普通表转换成分区表有以下4种方法:
1)导出、导入方法(Export/Import Method)
2) 子查询插入方法(Insert With a Subquery)
3)分区交换方法(Partition Exchange Method)
4)在线重定义方法(DBMS_REDEFINITION Method)