亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle SQL 性能優化技巧

系統 2002 0

1. 用適合的 ORACLE 化器
???? ORACLE
化器共有 3

???? A 、 RULE ( 基于 規則 ) b COST ( 基于成本 ) c CHOOSE ( 選擇 )

???? 置缺省的 化器,可以通 過對 init.ora 文件中 OPTIMIZER_MODE 參數的各 聲明,如 RULE COST , CHOOSE , ALL_ROWS , FIRST_ROWS 你當然也在 SQL 或是會 (session) 級對 行覆蓋。

???? 了使用基于成本的 化器 (CBO , Cost-Based Optimizer) , 你必 須經 常運行 analyze 命令,以增加數據 中的 統計 信息 (object statistics) 的準確性。

???? 如果數據 化器模式 為選擇 (CHOOSE) ,那 么實際 化器模式將和是否運行 analyze 命令有 如果 table analyze , 化器模式將自 CBO 反之,數據 將采用 RULE 形式的 化器。

在缺省情況下, ORACLE 采用 CHOOSE 化器, 了避免那些不必要的全表 (full table scan) , 你必 盡量避免使用 CHOOSE 化器,而直接采用基于 規則 或者基于成本的 化器。


2.
訪問 Table 的方式
???? ORACLE
采用兩 種訪問 表中 記錄 的方式:

???? A 、 全表

????????? 全表 描就是 序地 訪問 表中 記錄 。 ORACLE 采用一次 入多個數據 (database block) 的方式 化全表 描。

???? B ROWID 訪問

????????? 你可以采用基于 ROWID 訪問 方式情況,提高 訪問 表的效率, ROWID 包含了表中 記錄 的物理位置信息。 ORACLE 采用索引 (INDEX) 實現 了數據和存放數據的物理位置 (ROWID) 系。通常索引提供了快速 訪問 ROWID 的方法,因此那些基于索引列的 查詢 就可以得到性 能上的提高。


3.
共享 SQL
????
了不重 解析相同的 SQL 句,在第一次解析之后, ORACLE SQL 句存放在內存中。 這塊 位于系 全局區域 SGA(system global area) 的共享池 (shared buffer pool) 中的內存可以被所有的數據 共享。 因此,當你 行一個 SQL ( 被稱 一個游 ) ,如果它和之前的 句完全相同, ORACLE 就能很快 得已 被解析的 句以及最好的 行路徑。 ORACLE 個功能大大地提高了 SQL 行性能并 省了內存的使用。

???? 可惜的是 ORACLE 對簡單 的表提供高速 (cache buffering) , 個功能并不適用于多表 查詢

???? 數據 管理 init.ora 為這 個區域 置合適的參數,當 個內存區域越大,就可以保留更多的 句,當然被共享的可能性也就越大了。

???? 當你向 ORACLE 提交一個 SQL 句, ORACLE 會首先在 這塊 內存中 找相同的 句。 里需要注明的是, ORACLE 兩者采取的是一 種嚴 格匹配,要達成共享, SQL 句必 完全相同 ( 包括空格, 行等 ) 。

???? 數據 管理 init.ora 為這 個區域 置合適的參數,當 個內存區域越大,就可以保留更多的 句,當然被共享的可能性也就越大了。

???? 共享的 句必 須滿 足三個條件:

???? A 、 字符 的比 當前被 行的 句和共享池中的 句必 完全相同。

???? B 兩個 句所指的 象必 完全相同:

???? C 、 兩個 SQL 句中必 使用相同的名字的 (bind variables) 。


4.
選擇 最有效率的表名 ( 只在基于 規則 化器中有效 )
???? ORACLE
的解析器按照從右到左的 FROM 子句中的表名,因此 FROM 子句中寫在最后的表 ( driving table) 將被最先 理。在 FROM 子句中包含多個表的情況下,你必 須選擇記錄 條數最少的表作 表。當 ORACLE 理多個表 , 會運用排序及合并的方式 接它 。首先, 描第一個表 (FROM 子句中最后的那個表 ) 對記錄進 行派序,然后 描第二個表 (FROM 子句中最后第二個表 ) ,最后將所有從第二個表中 索出的 記錄 與第一個表中合適 記錄進 行合并。

???? 如果有 3 個以上的表 查詢 那就需要 選擇 交叉表 (intersection table) 表, 交叉表是指那個被其他表所引用的表。


5.WHERE
子句中的
???? ORACLE
采用自下而上的 序解析 WHERE 子句,根據 個原理,表之 接必 寫在其他 WHERE 條件之前, 那些可以 過濾 掉最大數量 記錄 的條件必 寫在 WHERE 子句的末尾。


6.SELECT
子句中避免使用 ' * '
????
當你想在 SELECT 子句中列出所有的 COLUMN ,使用 動態 SQL 列引用 '*' 是一個方便的方法。不幸的是, 是一個非常低效的方法。 實際 上, ORACLE 在解析的 程中, 會將 '*' 依次 轉換 成所有的列名, 個工作是通 過查詢 數據字典完成的, 意味著將耗 更多的 時間


7.
減少 訪問 數據 的次數
????
SQL , ORACLE 在內部 行了 多工作:解析 SQL 句,估算索引的利用率, 量, 數據 等等。由此可 ,減少 訪問 數據 的次數,就能 實際 上減少 ORACLE 的工作量。


8.
使用 DECODE 函數來減少 時間
????
使用 DECODE 函數可以避免重 復掃 描相同 記錄 或重 復連 接相同的表。


9.
整合 簡單 ,無 關聯 的數據 庫訪問
????
如果你有幾個 簡單 的數據 庫查詢語 句,你可以把它 整合到一個 查詢 ( 即使它 沒有 )


10.
除重 復記錄

11. TRUNCATE 替代 DELETE
????
除表中的 記錄時 ,在通常情況下, (rollback segments ) 用來存放可以被恢 的信息。 如果你沒有 COMMIT , ORACLE 會將數據恢 除之前的狀 ( 準確地 是恢 除命令之前的狀況 ) 。

???? 而當運用 TRUNCATE , 段不再存放任何可被恢 的信息。當命令運行后,數據不能被恢 。因此很少的 源被 調 用, 時間 也會很短。


12.
盡量多使用 COMMIT
????
只要有可能,在程序中盡量多使用 COMMIT , 這樣 程序的性能得到提高,需求也會因 COMMIT 放的 源而減少

???? COMMIT 放的 源:

???? A 段上用于恢 數據的信息。

???? B 、被程序 得的

???? C 、 redo log buffer 中的空 。

???? D 、 ORACLE 管理上述 3 種資 源中的內部花


13.
記錄 條數
????
和一般的 點相反, count(*) count(1) 稍快,當然如果可以通 索引 索, 索引列的 數仍舊是最快的。例如 COUNT(EMPNO)


14.
Where 子句替 HAVING 子句
????
避免使用 HAVING 子句, HAVING 只會在 索出所有 記錄 之后才 對結 果集 過濾 。 理需要排序, 總計 等操作。如果能通 WHERE 子句限制 記錄 的數目,那就能減少 方面的 開銷


15.
減少 表的 查詢
????
在含有子 查詢 SQL 句中,要特 注意減少 表的 查詢


16.
內部函數提高 SQL 效率。

17. 使用表的 (Alias)
????
當在 SQL 句中 接多個表 , 使用表的 名并把 名前 Column 上。 這樣 一來,就可以減少解析的 時間 并減少那些由 Column 引起的 錯誤 。


18.
EXISTS 替代 IN
????
多基于基 表的 查詢 中, 滿 足一個條件,往往需要 另一個表 接。在 這種 情況下,使用 EXISTS( NOT EXISTS) 通常將提高 查詢 的效率。


19.
NOT EXISTS 替代 NOT IN
????
在子 查詢 中, NOT IN 子句將 行一個內部的排序和合并。 在哪 情況下, NOT IN 都是最低效的 ( 查詢 中的表 行了一個全表遍 ) 。 了避免使用 NOT IN ,我 可以把它改寫成外 (Outer Joins) NOT EXISTS 。


20.
用表 接替 EXISTS
????
通常來 , 采用表 接的方式比 EXISTS 更有效率


21.
EXISTS DISTINCT
????
當提交一個包含一 多表信息 ( 比如部 表和雇 ) 查詢時 ,避免在 SELECT 子句中使用 DISTINCT 。 一般可以考 EXIST

Oracle SQL 性能優化技巧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久在线免费观看 | 国产情侣普通话刺激对白 | 国产a免费 | 九九干| 四虎永久影院 | 亚洲精品一区二区久久久久 | 人人夜| 中文字幕一二三区 | 91伦理片| 久久国产首页 | 四虎影永久在线观看网址 | 国产在线乱子伦一区二区 | 免费观看一区二区 | 国产免费成人在线视频 | 成人免费午间影院在线观看 | 久久婷婷网 | 成人网18免费网站 | 国产亚洲图片 | 久草在线最新视频 | 亚洲狠狠色丁香婷婷综合 | 狠狠亚洲婷婷综合色香五 | 亚洲欧美综合视频 | 久草综合在线视频 | 亚洲国产精品久久综合 | 欧美乱码 | 视频二区 中文字幕 欧美 | 91精品全国免费观看 | 思思久久99热这里只有精品66 | 国产成人亚洲精品久久 | 亚洲国产人成中文幕一级二级 | 亚洲国产天堂久久九九九 | 国产精品欧美在线 | 日本精品一区二区三本中文 | 久久成人18免费网站 | 久久99国产亚洲高清观看韩国 | 久久桃花| 天天天天天天天操 | 天天干天天色综合 | 波多野结衣一区 | 精品无码久久久久国产 | 爆操白虎|