2013-02-14 88 views
0

假设我有下表:甲骨文表分区

Table Name: ITEM 
Columns: ID, ITEM_NUM, ITEM_COLOR, ITEM_SPEC, ITEM_STATUS 

和项目表是(LIST)上ITEM_STATUS柱分配。
ITEM_STATUS唯一的值可以是:有效,无效,暂停
ID是PK,因此它有索引。

现在,当我执行此查询:

select * from ITEM where ITEM_COLOR="Green" 

请帮我
1.如何将甲骨文决定去哪个分区,因为该分区不是在ITEM_COLOR列?
2.上述查询是否不会从分区中受益?
3. SQL查询是否有必要在WHERE子句中使用分区列,以便从分区中受益。
4.如何在分区情况下使用索引?

回答

1

如果没有办法确定您的查询是否只需要来自特定分区的数据,则Oracle必须查看您的表的所有分区。

分区的概念不能用一个简单的答案来解释,最好是阅读文档以便理解。

无论如何,在进入此之前,请务必先遇到性能问题,否则请不要将表格留空。

转到

http://docs.oracle.com/cd/E11882_01/server.112/e25789/schemaob.htm#CFAGCECIhttp://docs.oracle.com/cd/E11882_01/server.112/e25554/parpart.htm#i1007993http://docs.oracle.com/cd/E11882_01/server.112/e16638/data_acc.htm#i21879

0

在你的分区表中考虑三个表。 ITEM_active,ITEM_inactive,ITEM_suspended。物理上有三张桌子。逻辑上你有一张桌子。

所以,当你要求一种颜色时,你需要扫描所有三张表,因为绿色项目可能是活动或不活动,或暂停。换句话说,你不会从这个查询的分区中受益。

问题3:否。分区模式应该对查询透明。我会指定:查询必须独立于分区(也就是说,不要指定分区名称,而是使用where子句来过滤数据)。要求暂停项目的查询将隐含地受益于分区:将仅扫描包含暂停项目的分区。

问题4:索引可能是全局的(一个索引对象遍布所有partiitons - 难以维护)或本地索引(每个分区的物理索引)。索引列有利于使用索引进行快速搜索。分区索引没有什么特别之处。

0

在你的例子中,它不会使用分区修剪(这只是选择一个分区来知道在哪里检索信息),并且会进入所有分区。 当然,如果你不使用ITEM_STATUS,oracle不能只使用一个分区。

您的查询不会受益于分区。

您不需要将分区列放在where子句中,您可以使用FROM table partition (ACTIVE)

您可以使用分区索引或普通索引。