Oracle
表分析後的性能改進
我使用了一個包含 3 個表 a、b 和 c 的函式。表 a在兩列上有一個索引ind1 。
我使用上述函式呼叫包含程式碼並獲取數據的儲存過程。我分析了我的會話,它給出了直接路徑讀取事件,並在 1 分鐘內產生輸出。
當我分析上述3個表時,程序執行速度更快,並且在10秒內生成數據。什麼是表分析以及導致這種性能差異的原因是什麼?
Oracle 的優化器很聰明,它根據表的內容來決定如何最好地完成某些事情(例如連接)。至少,如果它知道表的內容是什麼,它就可以做到。
優化器使用表統計資訊來實現這一點。如果它知道有特定類型的數據,或特定的值分佈,或表中正在發生的任何數量的不同事物,它可以更改執行查詢的方式。
如果沒有統計資訊,則優化器必須猜測或使用預設值,而優化器的預設值可能適用於小數據量或無關緊要,但當表中的數據量增加或傾斜發生變化時,這可以對查詢的執行速度產生巨大影響。
通過分析表格,重新建構表格的統計資訊,優化器獲得有關表格內容的最新資訊,並可以做出更明智的決策。
請查看此處 ( http://docs.oracle.com/cd/E25054_01/server.1111/e16638/stats.htm ),了解 Oracle 關於優化器統計資訊的文件。