五分鐘精通Oracle Hints

2021-05-25 02:25:41 字數 1341 閱讀 9463

出處:

在向大家詳細介紹oracle hints之前,首先讓大家了解下oracle hints是什麼,然後全面介紹oracle hints,希望對大家有用。基於代價的優化器是很聰明的,在絕大多數情況下它會選擇正確的優化器,減輕了dba的負擔。但有時它也聰明反被聰明誤,選擇了很差的執行計畫,使某個語句的執行變得奇慢無比。

此時就需要dba進行人為的干預,告訴優化器使用我們指定的訪問路徑或連線型別生成執行計畫,從而使語句高效的執行。例如,如果我們認為對於乙個特定的語句,執行全表掃瞄要比執行索引掃瞄更有效,則我們就可以指示優化器使用全表掃瞄。在oracle中,是通過為語句新增 hints(提示)來實現干預優化器優化的目的。

oracle hints是一種機制,用來告訴優化器按照我們的告訴它的方式生成執行計畫。我們可以用oracle hints來實現:

1) 使用的優化器的型別

2) 基於代價的優化器的優化目標,是all_rows還是first_rows。

3) 表的訪問路徑,是全表掃瞄,還是索引掃瞄,還是直接利用rowid。

4) 表之間的連線型別

5) 表之間的連線順序

6) 語句的並行程度

除了」rule」提示外,一旦使用的別的提示,語句就會自動的改為使用cbo優化器,此時如果你的資料字典中沒有統計資料,就會使用預設的統計資料。所以建議大家如果使用cbo或hints提示,則最好對錶和索引進行定期的分析。

如何使用hints:

hints只應用在它們所在sql語句塊(statement block,由select、update、delete關鍵字標識)上,對其它sql語句或語句的其它部分沒有影響。如:對於使用union操作的2個 sql語句,如果只在乙個sql語句上有hints,則該hints不會影響另乙個sql語句。

我們可以使用注釋(comment)來為乙個語句新增hints,乙個語句塊只能有乙個注釋,而且注釋只能放在select, update, or delete關鍵字的後面

使用oracle hints的語法:

/*+ hint [text] [hint[text]]... */

or --+ hint [text] [hint[text]]...

註解:1) delete、insert、select和update是標識乙個語句塊開始的關鍵字,包含提示的注釋只能出現在這些關鍵字的後面,否則提示無效。

2) 「+」號表示該注釋是乙個hints,該加號必須立即跟在」/*」的後面,中間不能有空格。

3) hint是下面介紹的具體提示之一,如果包含多個提示,則每個提示之間需要用乙個或多個空格隔開。

4) text 是其它說明hint的注釋性文字

如果你沒有正確的指定hints,oracle將忽略該hints,並且不會給出任何錯誤。

Git五分鐘教程

使用git前,需要先建立乙個倉庫 repository 您可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄。git initgit init newrepo從現在開始,我們將假設您在git倉庫根目錄下,除非另有說明。我們有乙個倉庫,但什麼也沒有,可以使用add命令新增檔案。git add f...

Git五分鐘教程

入門使用git前 需要先建立乙個倉庫 repository 你可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄 使用您當前目錄作為git倉庫,我們只需使它初始化 git init 使用我們指定目錄作為git倉庫 git init newrepo 從現在開始,我們將假設你在git倉庫根目錄下,...

五分鐘了解CDN

cdn全稱content delivery network,即內容分發網路。其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快 更穩定。通過在網路各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智慧型虛擬網路,cdn系統能夠實時地根據網路流量和各節點...