• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SQL的優(yōu)化

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

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

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

      中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)10-2275-03

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

      1)全表掃描

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

      2)通過row_id來訪問

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

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

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

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

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

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

      2 注意FROM子句的順序

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

      3 注意WHERE子句的順序

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

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

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

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

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

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

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

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

      參考文獻(xiàn):

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

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

      庆元县| 巴东县| 瓦房店市| 平湖市| 洱源县| 宜兰县| 沅江市| 恭城| 海原县| 安多县| 禄丰县| 永寿县| 微博| 乐东| 顺义区| 灵台县| 沾益县| 万盛区| 龙山县| 澜沧| 秦安县| 神农架林区| 华亭县| 云浮市| 民丰县| 信宜市| 麟游县| 偏关县| 太仓市| 蚌埠市| 民丰县| 砀山县| 秦安县| 彭泽县| 开化县| 江阴市| 山西省| 兰坪| 晋中市| 巴马| 宁夏|