成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DBA推薦的7法寶提高SQL查詢性能

數據庫 Oracle
SQL查詢數據庫時,可以采取一系列的方式來提高查詢的速度和性能。比如用case代替update,使用臨時表和分批進行更新等。本文介紹了7種提高查詢速度的方法,請讀者參考。

SQL查詢數據庫時,適當遵循一些原則可以讓工作變得更加輕松,本文就列舉7個可以靈活運用的原則,它們可以幫助你提高SQL查詢速度,當然這些技巧你可以咨詢DBA獲得更多的信息。

1、用case代替update

要更新一條記錄,我們立即會想到update,這個問題非常常見,許多開發人員經常忽視這個原則,因為使用update看起來非常自然,非常合乎邏輯。

假設你從Customer表中提取記錄,你想將超過10萬美元的訂單標記為“Preferred”,因此你會想到使用一條update語句將CustomerRank列更新為“Preferred”,問題是update語句是有日志的,這就意味著每條記錄它會寫兩次,解決這個問題的辦法就是在SQL查詢中內嵌case語句,在向表寫入“Preferred”標志前,它會用訂單金額條件對每一行進行檢查,滿足條件的才會更新,性能的提升是驚人的。

2、不要盲目地重用代碼

這個問題也非常常見,在工作中直接用別人寫好的代碼是一件痛快的事情,你知道這些代碼可以查詢出你需要的數據,但問題是往往有些數據不是你需要的,但我們常常不愿意做一下修改,因此返回的數據集往往是一個超集,很可能多用一個外連接或是一個where子句就可以解決問題,因此在復用代碼時***檢查一下,如有必要略做適應性修改。

3、只提取你需要的列

這個問題和2有點類似,但這次是指定具體的列。也許我們在使用select * 時感覺很暢快,多省事呀!如果要將每個列名都寫出來,太麻煩了,這是很多人的想法,但這種想法是錯誤的,因為這樣做會取出多余的數據列,我無數次看到犯這種錯誤的代碼,曾經有一位開發人員對一張有120列,上百萬行數據的表使用select * 查詢,但他只會用到其中的三五列,這是對資源的極大浪費,我們建議拒絕書寫select * ,你要什么就查詢什么,多余的返回結果對你沒用,雖然不影響你要實現的功能,但對數據庫性能卻有極大的影響。

4、盡可能只查詢一次大表

這也是我看到很多人犯的錯誤,例如,某存儲過程從一張上百萬條記錄的大表中取數據,開發人員想提取居住在加利福利亞且收入高于4萬美元的客戶信息,因此它先將居住在加利福利亞的客戶取出放在一張臨時表中,然后再查詢收入高于4萬美元的客戶,將查詢結果放入另一張臨時表中,***,他連接這兩張臨時表查詢出最終的結果。

可能有人認為我是在開玩笑吧?但事實是確實有人這么做,這應該在一個查詢中就能完成,卻查詢了兩次大表。

有種稍微不同的情況是,當一個過程中的多個步驟需要大表的子集時,每一步可能都必須查詢一次大表。避免多次查詢的辦法是持久化***次查詢的子集,然后將后面的步驟指向該持久化子集。

5、使用臨時表

這個問題解決起來可能稍微有點麻煩,但其效果比較明顯,其實在很多時候你都可以使用臨時表,通過臨時表可以有效地減少對大表的操作,如果你必須連接一個表到大表,并且在大表上有條件,這時就可以將大表中需要的數據輸出到臨時表中,然后再用該臨時表進行連接,這樣查詢速度會有明顯改進。如果你的存儲過程中有多個查詢需要需要連接到相同的表時,也可以使用臨時表。

6、預存數據

這一條是我最喜歡的,因為它是一項很老的技術,常常被人們忽視,如果你有一個報表或存儲過程需要連接大表,提前提取大表中的數據,持久化存儲到另一張表中,報表就可以使用預存的數據集,從而提高整體執行效率。

并不是所有時候你都有機會利用該技術,但一旦能利用上,你會發現它是節省服務器資源很有效的辦法。

但遺憾的是,很多開發人員都在盡力回避這種技術,實際上只需要創建一個視圖就可以把問題解決了,但這種方法的問題是每個需要它的報表運行時都會執行一次,但對于同一個報表,假設10分鐘前運行了一次,現在有人要再運行該報表,那么對大表的連接操作就可以避免掉了。我建議對那些經常被查詢的表使用該技術將數據預存起來,可以節省大量的服務器資源。

7、分批刪除和更新

這也是一個容易被忽視的技巧,對一個大表做數據刪除或更新操作,如果操作不當可能是一場噩夢,問題是這兩種操作都是單一的事務,如果你需要殺死它們,或它們在執行時系統遇到問題,必須全部回滾整個事務,這個時間可能非常長,這就是為什么我們在刪除數十萬條記錄時,如果試圖中途殺死進程幾乎沒用的原因,這些操作也會影響到其它事務,搞不好會造成死循環,因此應慎用。

解決這個問題的辦法就是分批少量刪除或更新,首先,無論什么原因需要結束事務,只需要回滾少量的行,此外,小批量提交數據寫入磁盤,對I/O的要求也更低,并發性可以大大提高。

另外要提醒的是,執行刪除和更新操作應盡量選擇非高峰時段。

總結

遵循這些方法總是能收到效果,但在實踐中,我們應該根據實際情況,選用一種或幾種***方案,來提高我們執行查詢的速度,從而節省查詢時間,提高查詢效率。

【編輯推薦】

  1. 揭開功能強大的數據庫表DUAL的神秘面紗
  2. Oracle數據庫使用OMF來簡化數據文件的管理
  3. Oracle認證:詳解OracleTemp臨時表空間處理方法
  4. 淺談修復被優化大師Kiss掉的Oracle監聽器的兩種方法
  5. Oracle數據庫:全局索引的ONLINE重建要影響執行速度
責任編輯:趙鵬 來源: 中國IT實驗室
相關推薦

2010-06-22 10:00:31

SQL查詢

2010-10-21 10:42:30

SQL Server查

2011-07-08 17:49:38

WITH ASCTE

2017-11-06 13:25:25

MySQL數據庫技巧

2022-06-29 08:00:00

SQL分層表數據

2011-03-22 16:54:58

SQL語句

2013-05-16 09:11:15

系統故障故障排查

2011-04-01 15:36:24

索引SQL Server

2010-08-18 09:42:11

DB2性能調優

2019-07-26 09:22:20

工具代碼開發

2010-11-12 11:25:44

SQL SERVER視

2011-03-17 14:48:49

高級掃描數據庫查詢

2020-11-27 06:58:24

索引

2011-03-17 13:54:42

查詢參數SQL語句利用率

2010-07-16 13:48:08

SQL Server合

2022-07-04 17:32:12

DevOpsAIOps

2009-05-08 09:01:03

微軟Windows 7操作系統

2010-07-19 16:54:21

SQL

2010-10-27 15:26:42

Oracle執行計劃

2011-10-24 22:17:56

SQL ServerDBA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一区二区三区在线视频 | 国产精品无 | 欧美激情黄色 | 欧美日韩综合 | 成人精品一区二区三区 | 欧美精品一区二区三区在线四季 | 亚洲精品欧美一区二区三区 | 久久精彩视频 | 天天玩天天操天天干 | 久久免费视频网 | 国内精品久久久久久 | 成人精品国产 | 久久av资源网 | 久久精品综合网 | 无码一区二区三区视频 | 男人天堂午夜 | 四色永久| 男女视频在线观看免费 | 亚洲视频免费在线观看 | 超碰导航| 亚洲精品女人久久久 | 福利片在线| 久久激情视频 | 特级黄一级播放 | 中文字幕av在线 | 91精品国产91久久久久久最新 | 日韩第一夜 | 色婷婷av一区二区三区软件 | 久久久久久中文字幕 | 久久精品国产一区二区三区不卡 | 在线成人精品视频 | 亚洲免费成人 | 欧美精品久久久 | 国产精品久久久久久婷婷天堂 | xx性欧美肥妇精品久久久久久 | 综合网视频 | 夜夜爽99久久国产综合精品女不卡 | 狠狠草视频 | 亚洲精品无人区 | 欧美国产精品一区二区 | 亚洲第一av |