2013-02-14 89 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)

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