分区表和索引(4)

分区来提高性能
分区可以帮助你提高性能和可管理性。当由于以下这些原因而使用分区时一些主题必须要记住:
 分区栽剪
 分区智能连接
 并行 DML

分区栽剪
Oracle数据库服务器显示的识别分区和子分区。接着它标记了那些需要被SQL语句访问的分区和子分区和消除(栽剪)那些SQL语句不需要访问的分区和子分区。换而言之,分区栽剪是在一个查询中非必要索引和数据分区子分区的跳跃。

对于每个SQL语句,由所指定的选择条件决定消除非必要的分区或子分区。比如,如果一个查询只包含了三月份的销售数据,那就没必要查询剩余的十一个月份的数据。如此智能的栽剪可以显著减少数据量,从而在查询性能上得到了本质上的提升。

如果优化器确定已访问过的分区或子分区中的数据满足用于剪栽的选择条件,那它在估值期间从谓词列表(Where 子句)中删除这些条件以提高性能。可是,如果该SQL语句对分区列应用了一个函数(TO_DATE函数例外)时,优化器就不能栽剪分区。相似的,如果SQL语句对索引列应用了一个函数,那优化器就不能使用索引了,除非它是一个基于函数的索引。

在潜在的表的分区不能被消除时,剪栽也能消除索引分区,但这只有在索引和表在不同的列上分区时。你通常可以通过创建分区索引来减少你的SQL语句需要访问或修改的数据的数量以提高在大表上操作的性能。

等式,范围,LIKE和IN-LIST谓词被认为是使用RANGE和LIST分区的分区减栽。并且,等式和In-List被认为是使用HASH分区的分区剪栽。

分区剪栽的例子
我们具有一张称为CUST_ORDERS的分区表。对于CUST_ORDERS表的分区键是ORDER_DATE。让我们假设CUST_ORDERS具有六个月的数据,1月到6月,每个分区对应每个月的数据。如果以下的查询被运行:
SELECT SUM(value)
FROM cust_orders
WHERE order_date BETWEEN '28-MAR-98' AND '23-APR-98';

分区剪载通过以下其中一种被完成:

 首先,分区消除了1,2,5,6的数据分区:
接着
 要么,由高索引的选择性决定3月,4月数据分区的一个索引扫描。
 要么,由低索引的选择性决定3月,4月数据分区的一个全部扫描。
分区智能连接
分区智能连接是对于遵照连接列连接的两张分区表的一个连接优化。使用分区智能连接,连接操作被拆分成更小的按顺序或并行执行的连接。考虑智能连接的另一种方式是在数据分区时分区智能连接可以在并行连接执行期间,在并行处理器间最小化数据转换的数量。
See Also: Oracle Database Data Warehousing Guide for more
information about partitioning methods and partition-wise joins
并行DML
特别对于在决策支持系统和数据仓库中的大型数据库上的集中数据来说,并行执行显著减少了数据响应的时间。此外,对于传统的表,你可以对RANGE和HASH分区表使用并行查询和并行DML操作。通过这样做,你可以对增强批量操作的可扩展性和性能。

对于并行DML会话来说,语义和约束都是一样的,与是否使用索引组织表无关。

See Also: Oracle Database Data Warehousing Guide for more
information about parallel DML and its use with partitioned tables

猜你喜欢

转载自refurbish.iteye.com/blog/1876059
今日推荐