• 
    

    
    

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

      基Oracle數據庫的幾種常見SQL優(yōu)化策略

      2018-05-07 05:45:32饒淑珍
      電腦知識與技術 2018年8期
      關鍵詞:數據庫優(yōu)化

      饒淑珍

      摘要:針對當前較為常見的Oracle數據庫應用,尤其是數據體量越來越大的現狀下,文章提出了幾種切合實際應用的優(yōu)化方式,在一定程度上提高了SQL語句的執(zhí)行效率,極大地加快了數據的查詢檢索等操作,充分實現了優(yōu)化的目的。

      關鍵詞:oracle;數據庫;SQL語句;查詢;優(yōu)化

      中圖分類號:TP311.13 文獻標識碼:A 文章編號:1009-3044(2018)08-0012-02

      隨著大數據、物聯網等概念的興起,關于數據的分析應用逐步從后臺走向了前臺,生活中各類的軟件開發(fā)、終端應用都離不開背后支撐整個環(huán)境的數據本身,動輒上億甚至百千億級別的數據亦不罕見,面對如此龐大的數據量,效率“二字”也被提升上了一個空前的高度之上。作為目前使用最為廣泛應用的SQL數據庫語句,如何對其做性能優(yōu)化,提升工作效率,去促成更強的決策能力、洞察力與最優(yōu)化處理,成為信息產業(yè)所有人聚焦的核心。本文從Oracle常用的SQL入手,結合工作教學,指出了幾種常見的性能優(yōu)化方式。

      1引言

      就目前而言,Oracle先天存在的跨平臺、可伸縮并行、分布式計算等特性都良好的適配了當前大數據的背景,其應用范圍也在逐漸擴大,對應的數據體量和復雜度也不斷增加,提高數據庫的處理性能只能依靠硬件資源的升級換代和SQL語句的優(yōu)化,相比之下,SQL的語句優(yōu)化貫穿持續(xù)整個軟件運行周期,其必然性不言而喻。

      2 SQL語句優(yōu)化的原則

      從程序開發(fā)角度來看,對于Oracle數據的操作是通過SQL語句來實現的,其數據的精煉程度,直接決定了交互的效率,是提高整個數據庫性能的最立竿見影且成本最低的方式。優(yōu)化的原則就是從成本人手,減少數據訪問量、減少交互次數,從而返回更少的數據,達到減少CPU和內存開銷,最終增加可用資源,即漏斗原則。

      3 Oracle數據庫中常見的優(yōu)化策略

      1)合理的創(chuàng)建和使用索引

      根據表的大小和使用率來創(chuàng)建索引,作為數據庫管理員來說,索引一樣使用系統開銷,并非所有的表都需要創(chuàng)建索引,為合適的表創(chuàng)建索引而非為所有的表創(chuàng)建索引。一般來說不需要為比較小的表創(chuàng)建索引,因為即使創(chuàng)建了索引,其性能并沒有得到改善,反而要付出建立索引的開銷和維護成本,得不償失。而對于較大的表,要首先分析表中需要查詢的數據量,若經常需要查詢的數據不超過15%,則創(chuàng)建索引的必要性就需要斟酌了,15%只是實際的一個經驗數據,也可以測試一下全表查詢的時間,和建立索引相對比時間是否縮短,來評估索引是否建立的必要性。

      按照經驗來說,索引可以提高Oracle數據庫的查詢效率,但數據庫進行更新時,包括增加、刪除、改寫等,都會對索引進行更新,當索引越多時,占用資源的開銷就會越大,需要在兩個之間尋求一個平衡點。原則上當表的記錄更新為主時,不要見太多索引,當表數據需要頻繁調用時,則需要比較多的索引。

      2)大數據量查詢記錄數優(yōu)化

      在目前大數據的背景下,以億為單位數據時常遇到,一般數據庫操作人員習慣使用Count(*)來統計表的記錄數,Count命令執(zhí)行的是Table Full Scan,也就是全表掃描,會占用極大地資源開銷。實際上,無論是否建有索引,都應該使用sysindexes來進行查詢,可以很快的返回結果。

      3)盡量避免通配符首位出現

      當通配符(%)在搜索詞的首位出現時,Oracle將不適用數據表的索引,雖然很多情況下我們無法避免此類情況,但要慎重執(zhí)行,通配符首位出現時會降低查詢的效率。例如我們在sample表中查詢包含“子”的人,通常采用:

      Select*from sample where sample_name hke‘%子%;

      此時索引無法被利用,但當通配符出現在其他位置時,就可以利用索引,例如:

      Select*from sample where sample_name hke‘李%;

      4)盡量使用UNION ALL代替UNION命令

      UNION執(zhí)行的是表連接并去重復的操作,包含了多表的連接、結果集的排序、重復數據的剔除,而在實際的運用場景下,尤其是已經確定了主鍵的表,并不會產生重復的數據,應盡可能地使用UNION ALL代替UNION來進行操作,直接對多表進行合并操作,節(jié)約不必要的資源開銷,尤其是大數據量的操作時。

      5)用MERGE改寫UPDATE子查詢

      MERGE命令是Oracle9i及以后版本新增的命令,其字面上的意思就是合并、兼并,用來合并UPDATE和INSERT語法。通過MERGE命令,根據一張表或子查詢的連接條件對另外一張表進行查詢,當連接條件匹配的時候進行數據更新,執(zhí)行UP-DATE操作,無法匹配時為這個表新增一條數據,執(zhí)行INSERT操作。這個命的執(zhí)行效率遠高于INSERT+UPDATE,僅進行一次全表掃描就完成了所有工作。例如:

      MERGE INTO Target AS A

      USING Source AS B

      ON A.aac002=B.aac002

      WHEN MATCHED——-當aac002匹配時,目標表進行數據更新

      THEN UPDATE SET A.aac001=B.aac001

      WHEN NOT MATCHED——-當目標表未查詢到,在原表有的則進行插入

      THEN INSERT VALUES(A.aac002,B.aac001)

      WHEN WHEN NOT MATCHED BY SOURCE——目標表存在,而原表不存在時進行查詢

      THEN DELETE

      即簡潔完整的執(zhí)行了一系列更新、插入、刪除的操作,又相比傳統的UPDATE和INSERT極大地提高了效率。

      6)習慣使用COMMIT命令

      當執(zhí)行數據操縱語言之后,盡可能地多使用COMMIT命令進行提交操作,對占用的rollback回滾記錄進行釋放,以釋放資源提高整體性能,即釋放以下開銷:

      ①回滾段上用于恢復數據的記錄信息;

      ②被程序語句獲得的鎖;

      ③redo log buffer中的占用的空間;

      ④ORACLE為管理上述3種資源占用的內部開銷。

      7)盡量使用WHERE代替HAVING語句

      盡可能地減少HAVING語句的使用范圍,在一個完整的SELECT語句中ON最先執(zhí)行,其次是WHERE,再次是聚合函數計算,最后才是HAVING和排序操作等,如果能在HAVING的前置環(huán)節(jié)限制檢索的數據量,就可以減少之后的分組運算開銷,即在分組之前過濾數據。綜合來看,一類是WHERE語句和HAVING語句同時存在的SQL語言,通過WHERE字句限制數據記錄的數量,減少后續(xù)聚合運算、分組篩選、排序操作的資源開銷。另一類是WHERE字句和HAVING字句都可以實現的SQL語句,應該直接使用WHERE字句代替HAVING字句,此時在篩選排序之前就先行進行了過濾,效率遠高于HAVING字句,例如同樣兩個語句:

      8)增加執(zhí)行命令的重復使用率

      SQL語句執(zhí)行完畢后會駐留在高速緩存中,多數時候命令的執(zhí)行具有重復性,要盡量保證同一功能SQL語句的一致性,盡量確保重復執(zhí)行時直接調用駐留在高速緩存中的執(zhí)行計劃。在某些大數據平臺上,一些基礎的SQL語句每秒鐘會重復執(zhí)行上千次,重復調用執(zhí)行計劃可以大大的提高資源使用效率,建議一是使用對象(如表和視圖)的完全合法一致的名稱,二是在應用程序中規(guī)范使用變量,最大限度保持全局一致,提高重復使用率。

      4借助優(yōu)化軟件或者購買服務進行SQL優(yōu)化

      無論人工優(yōu)化還是機器軟件優(yōu)化,其目的都是為了更高的提高效率,相比較人工而言,高速發(fā)展的人工智能可以無疲勞、不間斷的進行各種語句性能比較,找到最優(yōu)的路徑,未來的SQL優(yōu)化也將逐步實現智能化的優(yōu)化方式。

      例如SQL Turning、SQLExpert更優(yōu)化軟件,以及Tkprof等跟蹤軟件,都是為了采用機器或者量化的方式進行語句的優(yōu)化,使得原本枯燥的語句分析變得更加直觀。而對于一些實力略顯不足的開發(fā)者而言,購買第三方服務也不失為一個選擇,甚至隨著分工的精細化,在大數據的產業(yè)鏈中,會衍生圍繞優(yōu)化的服務產業(yè)并蓬勃發(fā)展。

      5結束語

      其實關于Oracle的SQL語句優(yōu)化是一個復雜的過程,上述的一些心得僅僅是應用層的一些表現,關于數據庫的運維還涉及底層的資源分配、網絡層的流量控制和操作系統的構架,甚至相同的平臺的不同類型數據,其優(yōu)化方式的原則都要隨之改變,而不是教條式的簡單修改,作為我們使用者而言,應該多加探索,借助優(yōu)化軟件、跟蹤分析,加以人工辨別,找到一個適合自己的行之有效優(yōu)化方式。

      猜你喜歡
      數據庫優(yōu)化
      超限高層建筑結構設計與優(yōu)化思考
      房地產導刊(2022年5期)2022-06-01 06:20:14
      民用建筑防煙排煙設計優(yōu)化探討
      關于優(yōu)化消防安全告知承諾的一些思考
      一道優(yōu)化題的幾何解法
      數據庫
      財經(2017年2期)2017-03-10 14:35:35
      數據庫
      財經(2016年15期)2016-06-03 07:38:02
      數據庫
      財經(2016年3期)2016-03-07 07:44:46
      數據庫
      財經(2016年6期)2016-02-24 07:41:51
      平武县| 北辰区| 湘阴县| 抚州市| 开原市| 阳信县| 平南县| 宜君县| 新巴尔虎右旗| 神农架林区| 左贡县| 曲周县| 和林格尔县| 东明县| 峨眉山市| 台湾省| 浠水县| 泗洪县| 永城市| 米林县| 八宿县| 珲春市| 南康市| 新安县| 额尔古纳市| 灌云县| 延寿县| 定远县| 泰州市| 乌兰浩特市| 阿巴嘎旗| 乌兰察布市| 微博| 咸阳市| 越西县| 广东省| 江孜县| 南陵县| 平遥县| 通海县| 辽宁省|