資料庫之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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...