国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQL的優(yōu)化

2013-12-29 00:00:00陳建軍
電腦知識與技術(shù) 2013年10期

摘要:論文論述了SQL優(yōu)化的方法,通過一些簡單的 SQL 優(yōu)化規(guī)則就可以不同程度地提升 SQL 語句的效率。

關(guān)鍵詞:SQL;效率

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2013)10-2275-03

Oracle提供了兩種方式訪問全表:

1)全表掃描

全表掃描就是順序遍歷全表,Oracle采用一次讀入多個數(shù)據(jù)塊(database t_b)的方式對全表掃描做了優(yōu)化,但是全表掃描的效率是比較低的。

2)通過row_id來訪問

row_id包含了記錄的物理地址信息,采用基于row_id的方式來訪問表可以提高效率。而索引就是oracle聯(lián)系數(shù)據(jù)和存放數(shù)據(jù)的物理地址的紐帶,通常,索引提供了快速訪問row_id的方法,所以基于索引列的查詢就能實現(xiàn)效率的提升,通常大型表的索引對效率的提升作用特別明顯。

索引的使用也要得當,不恰當?shù)乃饕炊卤豆Π?,通常需要注意的是以下幾點:

1)在經(jīng)常進行連接的列上建立索引。

2)在經(jīng)常進行g(shù)roup by或者order by操作的列上建立索引。

3)在where語句部分常用到的,并且有較多不同值的列建索引,不要在取值少的列建索引。

5)要避免在索引列上使用IS NULL和IS NOT NULL。對唯一索引,如索引列包含空值,那么索引中將不存在此記錄;對復合索引,如果每個列均為空,索引中同樣不存在此記錄(如果索引列有一個不為空,則記錄存在于索引中)。所以要避免在索引中使用可以為空的列,因為ORACLE將無法使用該索引??梢詫⑺饕袨榭盏挠涗涍M行賦值,或者直接指定索引列為NOT NULL。

2 注意FROM子句的順序

ORACLE采用從右到左的順序來處理FROM子句中的表,寫在最后的表會被最先處理。在需要從多張表查詢數(shù)據(jù)的時候,按記錄數(shù)多少降序列出各張表將獲得最高效率。ORACLE在處理多張表時,用排序和合并的方式連接數(shù)據(jù):先掃描第一張表,也就是FROM子句最后的那張表,并對數(shù)據(jù)進行排序,接著掃描第二張表,也就是FROM子句的倒數(shù)第二張表,然后將從第二張表取出的數(shù)據(jù)和第一張表取出的數(shù)據(jù)進行合并,依此類推。

3 注意WHERE子句的順序

ORACLE使用自下而上的順序來解析WHERE子句,所以,能過濾最多紀錄的條件要寫在WHERE子句的最后,幾個表之間的連接則寫在最前。

4 發(fā)生數(shù)據(jù)變化的時候,要使用COMMIT

編寫程序和存儲過程的時候,只要發(fā)生數(shù)據(jù)變化,就要記得寫上COMMIT,這樣程序和存儲過程的性能會得到提升,隨著COMMIT釋放資源,需求也會隨之減少。

5 精簡查詢的次數(shù)

12 避免對搜索參數(shù)使用其他數(shù)學操作符

WHERE條件左邊不使用數(shù)學操作符,可以略微提高執(zhí)行速度。

由于系統(tǒng)在繁忙的應用中,服務器的CPU的使用率在不斷變化中,同一SQL語句,兩次執(zhí)行的時間就可能不同,上述SQL優(yōu)化的例子中的執(zhí)行時間是我2次執(zhí)行的平均時間,所以能反映出不同語句的效率差異。

上述優(yōu)化規(guī)則有的能提高效率上千倍,有的只能提高效率百分之幾,但是對多終端的系統(tǒng)而言,應用程序和復雜的存儲過程如果都能應用以上規(guī)則,就可以提升整個系統(tǒng)的性能,從而能高效處理各項事務。

參考文獻:

[1] 崔群法. SQL Server 2008中文版從入門到精通[M].北京:電子工業(yè)出版社,2009.

[2] 馬軍,李玉林. SQL語言與數(shù)據(jù)庫操作技術(shù)大全:基于SQL server實現(xiàn)[M].北京:電子工業(yè)出版社,2008.

修武县| 苍溪县| 特克斯县| 平遥县| 敦煌市| 栾川县| 天津市| 湘潭市| 宁晋县| 平潭县| 襄樊市| 太白县| 休宁县| 宜都市| 大竹县| 黄陵县| 大余县| 永泰县| 溧水县| 元江| 砚山县| 电白县| 抚州市| 孙吴县| 丰宁| 三原县| 西林县| 龙海市| 西宁市| 青州市| 大荔县| 和龙市| 聂荣县| 尚志市| 嘉祥县| 楚雄市| 大庆市| 海门市| 克山县| 松原市| 健康|