資料庫之Oracle優化技巧(一)

来源:https://www.cnblogs.com/buaixiaoyumi/archive/2020/05/29/oracle_optimize_1.html
-Advertisement-
Play Games

資料庫之Oracle優化技巧(一) 1.where子句中的連接順序 在Oracle資料庫中,where子句的執行順序是自下而上進行解析,根據這個原理,表之間的連接必須寫在其他where條件之前,那些可以過濾掉最大數量記錄的條件必 須寫在where子句的末尾。 2.select子句中避免使用 ‘ * ...


資料庫之Oracle優化技巧(一)

1.where子句中的連接順序

在Oracle資料庫中,where子句的執行順序是自下而上進行解析,根據這個原理,表之間的連接必須寫在其他where條件之前,那些可以過濾掉最大數量記錄的條件必

須寫在where子句的末尾。


2.select子句中避免使用 ‘ * ‘(開發中禁止使用*)
  oracle在解析的過程中,會將'*' 依次轉換成所有的列名,這個工作是通過查詢數據字典完成的,這意味著將耗費更多的時間。


3.用truncate替代delete

當刪除表中的記錄時,在通常情況下,回滾段(rollback segments )用來存放可以被恢復的信息。

如果你沒有commit事務,oracle會將數據恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況)而當運用truncate時,回滾段不再存放任何可被恢復的信

息。當命令運行後,數據不能被恢復。因此很少的資源被調用,執行時間也會很短。

註意:儘管truncate效率比delect高,但是由於truncate刪除的數據不可恢復,所以在實際開發中還是不建議使用的

 

4.用 where子句替換having子句

避免使用 having子句, having只會在檢索出所有記錄之後才對結果集進行過濾. 這個處理需要排序,總計等操作.

如果能通過 where子句限制記錄的數目,那就能減 少這方面的開銷.

on、where、having 這三個都可以加條件的子句中, on 是最先執行,where 次之,having 最後,因為 on 是先把不符合條件的記錄過濾後 才進行統計,它就可以減

少中間運算要處理的數據,按理說應該速度是最快的,where 也應該比 having 快點的,因為它過濾數據後才進行 sum,在兩個表聯接時才用 on 的。

在這單表查詢統計的情 況下,如果要過濾的條件沒有涉及到要計算欄位,那它們的結果是一樣的,只是 where 可以使用 rushmore 技術,而 having 就不能,在速度

上後者要慢。

如果要涉及到 計算的欄位,就表示在沒計算之前,這個欄位的值是不確定的,where 的作用時間是在計算之前就完成的,而 having 就是在計算後才起作用 的,所以

在這種情況下,兩者的結果會不同。在多表聯接查詢時,on 比 where 更早 起作用。


5.減少對錶的查詢

from 後面的主表在執行過程中為全表掃描,在所有表訪問形式中全表掃描最耗費時間,所以在滿足業務邏輯的條件下,應減少子查詢(即減少全表掃描),可以使用

關聯查詢代替子查詢。

 

6.用索引提高效率

索引是表的一個概念部分,用來提高檢索數據的效率.通常,通過索引查詢數據比全表掃描要快.

當oracle找出執行查詢 和 update 語句的最佳路徑時, oracle優化器將使用索引. 同樣在聯結多個表時使用 索引也可以提高效率. 另一個使用索引的好處是,它提供了主鍵(primar key)

的唯一 性驗證。

  使用所有需要主要兩點:

  a. 如果檢索數據量超過 30%的表中記錄數,使用索引將沒有顯著的效率提高。

  b. 在特定情況下, 使用索引也許會比全表掃描慢, 但這是同一個數量級上的區別。而通常情況下,使用索引比全表掃描要塊幾倍乃至幾千倍!

 

7.sql 語句用大寫

  因為 oracle 總是先解析 sql 語句,把小寫的字母轉換成大寫的再執行。為減少解析所消耗的時間,建議sql語句使用大寫。

  編輯器大小寫轉換快捷鍵(適用於idea和eclipse)

  Ctrl+Shift+X 把當前選中的文本全部變為大寫

  Ctrl+Shift+Y 把當前選中的文本全部變為小寫

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當我對Docker技術還是一知半解的時候,我發現理解Docker的命令非常困難。於是,我花了幾周的時間來學習Docker的工作原理,更確切地說,是關於Docker統一文件系統(the union file system)的知識,然後回過頭來再看Docker的命令,一切變得順理成章,簡單極了。 題外話 ...
  • 1、環境準備,安裝sqlite3軟體 sudo apt-get install sqlite3 2、編寫sql執行腳本(更新操作),每條sql語句以分號結束,sql.sql文件內容: ALTER TABLE "GameDeviceInfo" ADD "Delay" INTEGER NOT NULL ...
  • https://blog.csdn.net/youngbit007/article/details/54288603 groupbyimport pandas as pddf = pd.DataFrame({'key1':list('aabba'), 'key2': ['one','two','on ...
  • 原文地址:https://mysqlserverteam.com/mysql-explain-analyze/ MySQL 8.0.18剛剛發佈(譯者註:原文發表時間為October 17, 2019),它包含了一個全新的特性來分析和理解查詢是如何執行的:explain analyze。 expla ...
  • 桔妹導讀:在各大互聯網公司都提倡數據驅動的今天,AB實驗是我們進行決策分析的一個重要利器。一次實驗過程會包含多個環節,今天主要給大家分享滴滴實驗平臺在分組環節推出的一種提升分組均勻性的新方法。本文首先會介紹一下滴滴AB實驗的相關情況,以及在實驗分組環節中遇到的問題。然後介紹目前在實驗對象分組方面的通 ...
  • 需求: 1.提供一個index.html頁面,頁面中有個省份,下拉列表2.當頁面載入完成時,發送ajax請求。載入所有省份 前期項目初步搭建: index.html $(function(){ $.get("url",{},funtion(data){ //url-查詢servlet路徑,{}不要參 ...
  • (1)查詢學生的基本信息; select * from S; (2)查詢“CS”系學生的基本信息; select * from S where Sdept =’CS’; (3)查詢“CS”系學生年齡不在19到21之間的學生的學號、姓名; select Sno, Sname from S where ...
  • 1、問題描述: 今天突然PHP同事給我說預發佈的mongo掛了,我上去看了一下日誌顯示: 原因: 同事說他建了個索引,然後mongo就掛了,由於mongodb的重建索引的時候,吃掉所有記憶體,導致mongodb進程被殺掉。 2、解決方法: 方法一:要麼增加伺服器記憶體 方法二:要麼刪除一些索引,開啟服務 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...