oracle 效能優化

mcxiaoracle發表於2022-07-02

18. 用表連線替換EXISTS

當提交一個包含對多表資訊(比如部門表和僱員表)的查詢時,避免在SELECT子句中使用DISTINCT。 一般可以考慮用EXIST替換。

EXISTS 使查詢更為迅速,因為RDBMS核心模組將在子查詢的條件一旦滿足後,立刻返回結果。


下面的SQL工具可以找出低效SQL,前提是需要DBA許可權,否則查詢不了。

11.png

另外也可以使用SQL Trace工具來收集正在執行的SQL的效能狀態資料,包括解析次數,執行次數,CPU使用時間等 。


EXPLAIN PLAN 是一個很好的分析SQL語句的工具, 它甚至可以在不執行SQL的情況下分析語句. 通過分析, 我們就可以知道ORACLE是怎麼樣連線表, 使用什麼方式掃描表(索引掃描或全表掃描)以及使用到的索引名稱。


22. SQL PLUS的TRACE


    12.png

    23. 用索引提高效率

    2)Oracle對索引有兩種訪問模式

    • 索引唯一掃描 (Index Unique Scan)
    • 索引範圍掃描 (Index Range Scan)


    (3)基礎表的選擇

    • 基礎表(Driving Table)是指被最先訪問的表(通常以全表掃描的方式被訪問)。 根據優化器的不同,SQL語句中基礎表的選擇是不一樣的。
    • 如果你使用的是CBO (COST BASED OPTIMIZER),優化器會檢查SQL語句中的每個表的物理大小,索引的狀態,然後選用花費最低的執行路徑。
    • 如果你用RBO (RULE BASED OPTIMIZER), 並且所有的連線條件都有索引對應,在這種情況下,基礎表就是FROM 子句中列在最後的那個表。



    推薦閱讀:

    https://developer.aliyun.com/article/868583




    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2903980/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章