999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

關于SQL文優(yōu)化問題總結

2012-04-29 00:00:00魏靜敏劉歡杰
企業(yè)導報 2012年23期

【摘 要】實際系統(tǒng)中遇到性能問題是非常常見的,性能優(yōu)化有許多方面,其中包括硬件方面,軟件方面,包括服務器端,客戶端等等。本文重點基于ORACLE分析了影響SQL文性能的原因,然后列舉了幾點性能優(yōu)化的對策,希望給開發(fā)人員在編碼時提供幫助,給SQL的性能問題調查者提供一個方向。

【關鍵詞】ORACLE;性能問題;SQL文優(yōu)化

一、問題提出

之前有個項目,其中的批處理定期調用一個存儲過程,在測試環(huán)境中運行沒有問題,但是正式運行出現(xiàn)了錯誤,執(zhí)行存儲過程時出現(xiàn)了錯誤:提示是表空間不足。為了解決這個問題,筆者對SQL文的性能優(yōu)化進行了學習和研究。

二、問題調查與解決

由于該存儲過程內容比較多,大概有3000多行,也不能判斷那部分出了問題,首先在可能出現(xiàn)問題的地方追加了LOG信息。由于測試環(huán)境中該問題不能再現(xiàn),所以代碼更新到了實際環(huán)境中進行運行,通過LOG發(fā)現(xiàn)是在執(zhí)行某個SQL文時出的錯誤,這個SQL文涉及到了10多個表,而其中表中的數(shù)據(jù)量比較大。執(zhí)行時用到的臨時表空間高達40G,后來通過調查對SQL的進行了調整,只是修改了WHERE條件中其中兩個條件的順序,這個問題就解決了。

三、SQL文性能原因分析

(1)在大記錄集上進行高成本操作,如使用了引起排序的謂詞等。(2)過多的I/O操作(含物理I/O與邏輯I/O),最典型的就是未建立恰當?shù)乃饕瑢е聦Σ樵儽磉M行全表掃描。減少訪問數(shù)據(jù)庫的次數(shù),就能實際上減少ORACLE的工作量。(3)處理了太多的無用記錄,如在多表連接時過濾條件位置不當導致中間結果集包含了太多的無用記錄。(4)未充分利用數(shù)據(jù)庫提供的功能,如查詢的并行化處理等。

四、SQL文性能優(yōu)化總結

(1)建立恰當?shù)乃饕洺_M行排序和連接操作的字段建立索引。(2)避免使用”*”,SQL文中引用”*”,使用起來的確非常方便,但是效率非常低,主要是ORACLE在解析的過程中,會將”*”一次轉化成所有的列名,這個工作是通過查詢數(shù)據(jù)字典完成的。這就意味著消耗更多的時間。(3)盡量避免多表關聯(lián)。(4)避免使用消耗資源的操作,帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎執(zhí)行消耗資源的排序功能。DISTINCT需要一次排序操作,其他的至少需要執(zhí)行二次排序。通常帶有執(zhí)行UNION,MINUS,INTERSECT的SQL語句都可以通過其他方式回避。例如:SELECT DISTINCT A.NO,A.NAME FROM A,B WHERE A.NO=B.NO可以替換為效率更高的EXISTS來實現(xiàn),SELECT A.NO,A.NAME FROM A WHERE EXISTS(SELECT 1 FROM B WHRE B.NO=A.NO)。(5)避免在索引列上使用函數(shù)。例如:

SELECT NO FROM A WHERE A.SCORE * 2>180可以修改為SELECT NO FROM A WHERE A.SCORE>180/2。(6)避免在索引列上使用NOT。NOT會產生和在索引列上使用函數(shù)相同的影響。當ORACLE遇到NOT時,他就會停止使用索引轉而執(zhí)行全表掃描。(7)避免在索引列上使用IS NULL,IS NOT

NULL。(8)減少對表的查詢。在含有自查詢的語句中,要特別注意減少對表的查詢。(9)注意WHERE字句的連接順序。ORACLE原則上采用自下而上的順序解析WHERE子句,根據(jù)據(jù)這個原理,當在WHERE子句中有多個表聯(lián)接時,WHERE子句中排在最后的表應當是返回行數(shù)可能最少的表,有過濾條件的子句應放在WHERE子句的最后。(10)使用表的別名(Alias):當在SQL語句中連接多個表時,請使用表的別名并把別名前綴于每個Column上.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤。(11)用EXISTS替代IN、用NOT EXISTS替代NOT IN。在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯(lián)接,在這種情況下,使用EXISTS(或NOT EXISTS)通常將提高查詢的效率。在子查詢中,NOT IN子句將執(zhí)行一個內部的排序和合并。無論在哪種情況下,NOT IN都是最低效的(因為它對子查詢中的表執(zhí)行了一個全表遍歷)。為了避免使用NOT IN,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS。(12)sql語句用大寫的。因為oracle總是先解析sql語句,把小寫的字母轉換成大寫的再執(zhí)行。(13)用>=替代>。高效:SELECT*FROM EMP

WHERE DEPTNO>=4;低效:SELECT*FROM EMP WHERE DEPTNO>3。兩者的區(qū)別在于,前者DBMS將直接跳到第一個DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個DEPT大于3的記錄。

SQL語言在數(shù)據(jù)庫應用中占有非常重要的地位,其性能的優(yōu)劣直接影響著整個信息系統(tǒng)的可用性。因此對于開發(fā)人員來說,理解SQL調優(yōu)的基本原理,這樣可能避免一些不必要的問題。理論上SQL的優(yōu)化方法很多,具體的效果好需要在實際的環(huán)境中進行驗證。有可能需要多個方法并用。

參 考 文 獻

[1]徐鳳梅.關系數(shù)據(jù)庫中SQL語言查詢的優(yōu)化策略[J].廣西輕工業(yè).2009(5)

主站蜘蛛池模板: 欧美激情首页| 无码专区在线观看| 午夜综合网| 2020国产在线视精品在| 国产一区二区影院| 亚洲人成网站18禁动漫无码| 香蕉视频在线精品| 亚洲全网成人资源在线观看| 综合社区亚洲熟妇p| 精品国产三级在线观看| 美女无遮挡拍拍拍免费视频| 中文字幕在线视频免费| 亚洲日韩高清在线亚洲专区| 国产精品无码AV中文| 國產尤物AV尤物在線觀看| 国产尹人香蕉综合在线电影| 国产精品香蕉在线| 欧美国产视频| 一区二区日韩国产精久久| 亚洲人成在线免费观看| 伊人色婷婷| 国产免费a级片| 免费国产小视频在线观看| 久热中文字幕在线| 成人在线亚洲| 成人福利在线视频免费观看| 精品久久国产综合精麻豆| 亚洲人精品亚洲人成在线| 无码中文AⅤ在线观看| 久无码久无码av无码| 欧美在线一二区| 欧美人人干| 99re视频在线| 午夜毛片免费观看视频 | 亚洲另类国产欧美一区二区| 日韩精品一区二区三区大桥未久| 亚洲大尺度在线| 久久黄色免费电影| 色悠久久综合| 日本一本在线视频| 国产电话自拍伊人| 国产精品视频第一专区| 国产9191精品免费观看| 黄色不卡视频| 性视频久久| 亚洲综合网在线观看| 欧美日本在线一区二区三区| 天天综合网站| 在线观看国产精品第一区免费| 欧美一级夜夜爽www| 国产乱子伦手机在线| 国产欧美在线视频免费| a天堂视频| 国产91熟女高潮一区二区| 国产微拍一区| 不卡的在线视频免费观看| 玩两个丰满老熟女久久网| 国产区免费精品视频| 亚洲婷婷六月| 成人在线天堂| 911亚洲精品| 亚洲va欧美ⅴa国产va影院| 国产香蕉97碰碰视频VA碰碰看| 日韩成人免费网站| 亚洲日本www| 国产精品亚洲综合久久小说| 日韩乱码免费一区二区三区| 无码免费视频| 欧美a级完整在线观看| 99视频有精品视频免费观看| 精品国产电影久久九九| 丁香婷婷激情网| 男女性色大片免费网站| 欧美 亚洲 日韩 国产| 国产高清自拍视频| 国产精品久久久精品三级| 亚洲午夜天堂| 成人蜜桃网| 国产一区亚洲一区| 狂欢视频在线观看不卡| 一区二区理伦视频| 亚洲啪啪网|