2013-03-22 44 views
1

enter image description here甲骨文:在索引搜索

我想用在LET_TESTATE_LETTURE並行執行,而不強制全表掃描,我想用武力對指數的並行迫使並行。

我該如何解決?

alter session enable parallel dml; 

CREATE TABLE netatemp.let_testate_letture1 
AS 
    SELECT /* parallel(tele 32) full(tele) */ 
     tele.TELE_DATA_LETTURA, 
     tele.tele_storico_id 
    FROM let_testate_letture tele 
    WHERE  tele.prov_provenienza_lettura_id = '*1ENI01BCAMBIO' 
      AND tele.spwkf_stato_pubblico_id != '*1UNICOANN'; 


Size 56,1 GB 
Number Extents 1.081 

OWNER SIUMETERING 
TABLE_NAME LET_TESTATE_LETTURE 
TABLESPACE_NAME SIUMETERING_DATITD 
CLUSTER_NAME  
IOT_NAME  
STATUS VALID 
PCT_FREE 10 
PCT_USED  
INI_TRANS 30 
MAX_TRANS 255 
INITIAL_EXTENT 80 KB 
NEXT_EXTENT 1 MB 
MIN_EXTENTS 1 
MAX_EXTENTS 2.147.483.645 
PCT_INCREASE  
FREELISTS 
FREELIST_GROUPS 
LOGGING YES 
BACKED_UP N 
NUM_ROWS 456.635.338 
BLOCKS 3.340.120 
EMPTY_BLOCKS 0 
AVG_SPACE 0 
CHAIN_CNT 0 
AVG_ROW_LEN 385 
AVG_SPACE_FREELIST_BLOCKS 0 
NUM_FREELIST_BLOCKS 0 
DEGREE 1 
INSTANCES 1 
CACHE N 
TABLE_LOCK ENABLED 
SAMPLE_SIZE 456.635.338 
LAST_ANALYZED 29/12/2012 13:03:15 
PARTITIONED NO 
IOT_TYPE  
TEMPORARY N 
SECONDARY N 
NESTED NO 
BUFFER_POOL DEFAULT 
FLASH_CACHE DEFAULT 
CELL_FLASH_CACHE DEFAULT 
ROW_MOVEMENT DISABLED 
GLOBAL_STATS YES 
USER_STATS NO 
DURATION  
SKIP_CORRUPT DISABLED 
MONITORING YES 
CLUSTER_OWNER 
DEPENDENCIES DISABLED 
COMPRESSION ENABLED 
COMPRESS_FOR OLTP 
DROPPED NO 
READ_ONLY NO 
SEGMENT_CREATED YES 
RESULT_CACHE DEFAULT 

回答

2

您必須將索引更改爲並行。即

alter index xxx parallel; 

alter index xxx parallel <n>; 

作爲平行暗示僅適用於表中。

2

嘗試在星號後

/*+ parallel_index(tele, let_tele_letb_prov_fk_idx, 32) */ 

公告的 「+」。沒有它,Oracle會忽略這個提示。

此外,您可能希望創建以及根據行NR並行返回的表,如:

CREATE TABLE netatemp.let_testate_letture1 parallel 32 as 
select /*+ ... 
1

你貼了很多有用的信息,這是非常令人耳目一新。因此,除了回答您的問題外,我還可以提供 其他建議以改善效果:

  1. 聲明級別提示。
    由於您在11gR2上(基於列SEGMENT_CREATED的存在),因此您應該使用 statement-level parallel hint而不是對象級別。使用/*+ parallel(32) */,然後Oracle將並行查詢中的所有內容,而不管訪問方法或別名是什麼。
  2. 舊統計數據或舊數據?
    最後分析於2012-12-29似乎有點古老。如果你的表格非常活躍,那麼你應該重新收集統計數據。如果它確實不會經常更改,則可能需要考慮重新創建它,並按prov_provenienza_lettura_id排序。這可能會顯着改善索引的性能。儘管可能會降低其他指標的表現。
  3. 壓縮。
    你的表使用壓縮,但你的索引是否也被壓縮?如果真的有900萬個條目用於相同的值,索引壓縮可以節省大量的空間,並使索引讀取速度更快。另外,位圖索引在這裏可能很適合。
  4. 全表掃描。
    優化器認爲您將讀取約2%的行。根據聚類因素等因素,甚至2%也可能足以保證全表掃描。您可能不想嘗試強制使用特定的訪問方法 - 首先讓Oracle嘗試選擇。如果Oracle弄錯了,那麼你應該通過提供更多有用的信息來幫助它,比如更好的統計數據和直方圖。

DazzaL和Ronnis的建議也應該有所幫助。

+0

非常感謝。我能問你如何強制Oracle計算直方圖並更新統計數據? (它是11g) – Revious 2013-03-27 14:25:22

+0

@ Gik25:'exec dbms_stats.gather_table_stats(,'LET_TESTATE_LETTURE',method_opt =>'FOR COLUMNS SIZE AUTO,FOR COLUMNS PROV_PROVENIENZA_LETTURA_ID SIZE 254');'雖然您可能想先嚐試不使用'method_opt',但我不確定這是否會有所幫助。此外,由於此表太大,您可能希望並行收集統計信息,您可以通過添加像'degree => dbms_stats.auto_degree'這樣的參數來執行此操作。 – 2013-03-28 04:30:11