sql調優總結

sql調優
線上發現部分sql查詢時間過長。使用explain觀察是否命中表的索引。未命中索引,使用 TABLE add index 語句添加索引。在這里插入圖片描述
除此之外,單個字段命中聯合索引的情況也會導致查詢變慢在這里插入圖片描述

針對多個字段的查詢可添加聯合索引。
總結如下慢sql的原因:
一、查詢語句本身的問題
查詢語句的編寫是否高效,直接影響執行效率,常見問題包括:

  1. 未使用索引,或條件無法命中索引時
    • 當查詢未使用索引,或條件無法命中索引時,數據庫會遍歷整個表的所有行,尤其對于大表(百萬級以上數據),耗時會急劇增加。
    • 例:SELECT * FROM orders WHERE amount > 1000;amount字段無索引,會觸發全表掃描。
  2. 使用SELECT *查詢所有列
  3. 復雜的聯表查詢(JOIN)
    • 多表聯表時未指定有效的關聯條件(如ON子句缺失或不合理),導致產生笛卡爾積(行數呈指數級增長)。
    • 聯表順序不合理:數據庫優化器可能因表大小或統計信息不準確,選擇低效的聯表順序(如小表驅動大表更高效,反之則耗時)。
  4. 子查詢嵌套過深
    • 多層嵌套的子查詢(尤其是IN子句中的子查詢)可能被數據庫多次執行,而非一次性優化,導致重復計算。
    • 例:SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE status=1); 若子查詢返回大量數據,效率會很低。同理避免in()中有大量數據。
  5. 排序和分組操作低效
    • ORDER BYGROUP BYDISTINCT等操作需要對數據進行排序或聚合,若涉及數據量過大且無索引支持,會觸發臨時表或文件排序(磁盤IO耗時遠高于內存)。
      二、索引相關問題
      索引是提升查詢效率的核心,但不合理的索引設計或使用會適得其反:
  6. 缺少必要的索引
    • 查詢的過濾條件(WHERE)、聯表條件(JOIN ON)、排序字段(ORDER BY)等未建立索引,導致全表掃描或低效掃描。
  7. 索引失效
    • 索引字段被函數或表達式操作:如WHERE SUBSTR(name, 1, 1) = 'A',會使索引失效。
    • 使用不等號(!=<>)、NOT INIS NULL(部分數據庫)、模糊查詢前綴帶%(如LIKE '%abc'),可能導致索引失效。
    • 聯合索引未遵循“最左前綴原則”:如聯合索引(a, b, c),查詢條件僅用bc時,無法命中索引。
  8. 索引過多
    • 表上索引數量過多,會導致INSERTUPDATEDELETE操作變慢(因為每次修改數據需同步更新索引),同時索引本身會占用磁盤空間,增加查詢時的索引選擇成本。
  9. 索引碎片化
    • 頻繁的更新或刪除操作會導致索引頁碎片化(存儲空間不連續),查詢時需要多次讀取磁盤,降低效率。
      三、數據庫設計問題
      不合理的表結構或數據分布會長期影響查詢性能:
  10. 表結構設計不合理
    • 表字段過多(寬表)或字段類型不合適(如用VARCHAR(255)存儲手機號,而非CHAR(11)),導致單條記錄體積過大,掃描時IO成本高。
    • 未進行分表分庫:大表(如千萬級以上數據)未按時間、地區等維度拆分,單表數據量過大,查詢耗時自然增加。
  11. 數據分布不均
    • 表中存在“熱點數據”(如某類記錄占比90%以上),即使有索引,查詢這類數據時仍需掃描大量索引頁(類似全表掃描)。
    • 例:WHERE status=0,若90%的記錄status都是0,索引可能失效,轉為全表掃描。
  12. 缺少分區表設計
    • 對于時間序列數據(如日志、訂單),未按時間分區(如按月份),查詢歷史數據時仍需掃描全表,而分區表可僅掃描目標分區。
      四、數據庫配置與狀態問題
      數據庫的運行狀態和配置參數也會影響查詢效率:
  13. 統計信息過時
    • 數據庫優化器依賴表的統計信息(如行數、字段分布、索引基數)生成執行計劃,若統計信息過時(如長期未更新),可能選擇低效計劃(如錯誤地走全表掃描而非索引)。
    • 解決:定期執行ANALYZE TABLE(MySQL)或UPDATE STATISTICS(SQL Server)更新統計信息。
  14. 連接數或資源限制
    • 數據庫連接數已滿,查詢需等待釋放連接,導致“排隊耗時”。
    • 內存、CPU資源不足:查詢需要的內存(如排序緩存、連接緩存)被耗盡,被迫使用磁盤臨時表,或CPU被其他進程占用,處理速度下降。
  15. 鎖等待或事務阻塞
    • 若查詢涉及的表或行被其他事務鎖定(如SELECT ... FOR UPDATE未及時提交),當前查詢會進入等待狀態,直到鎖釋放,表現為“查詢超時”。
      五、硬件與環境問題
      底層硬件或部署環境的瓶頸也可能導致查詢緩慢:
  16. 磁盤IO性能不足
    • 機械硬盤(HDD)讀寫速度遠低于固態硬盤(SSD),若數據庫文件存儲在HDD,且存在大量隨機IO(如索引掃描),會成為瓶頸。
    • 磁盤空間不足,導致臨時文件讀寫效率下降。
  17. 內存不足
    • 數據庫緩存(如MySQL的InnoDB Buffer Pool、Oracle的SGA)不足,頻繁將數據從磁盤加載到內存,增加IO次數。
      總結
      SQL查詢慢的原因可歸納為:查詢不優、索引不當、表設計不合理、數據庫狀態異常、硬件資源不足。排查時可通過執行計劃(如EXPLAIN命令)分析查詢路徑,結合數據庫監控工具(如MySQL的SHOW PROCESSLIST、SQL Server的 Profiler)定位具體瓶頸,再針對性優化(如加索引、改寫查詢、分表分庫等)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92005.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在nuxt項目中使用axios進行網絡請求?

在 Nuxt 項目中使用 Axios 進行網絡請求有兩種常用方式&#xff1a;一是直接安裝 Axios 并全局配置&#xff0c;二是使用 Nuxt 官方推薦的 nuxtjs/axios 模塊&#xff08;更便捷&#xff09;。以下是詳細步驟&#xff1a; 方法一&#xff1a;使用官方推薦的 nuxtjs/axios 模塊&…

Unity 實現手機端和電腦項目在局域網內通信

電腦端啟動后自動廣播自身存在&#xff0c;手機端啟動后監聽廣播并發現服務器。發現后自動建立 UDP 連接&#xff0c;雙方可互發消息。內置心跳檢測&#xff0c;網絡中斷時會自動檢測并提示斷開using UnityEngine; using System.Net; using System.Net.Sockets; using System.T…

C++_389_定義一個禁用了賦值操作、具有線程同步資源保護的結構體,作為一些回調函數的參數,方便獲取響應操作的結果等信息

/* 回調參數。注意:此結構體禁用了賦值,會編譯報錯 */struct API_CALLBACK_T{public:API_CALLBACK_T(){eRet = e_fail;bWait = true;

uniapp基礎 (一)

目錄 UniApp 是什么&#xff1f;有什么優勢 跨平臺高效開發 Vue.js 技術生態 插件生態豐富 漸進式開發支持 UniApp 跨平臺兼容的實現原理 編譯時轉 運行時適配層 條件編譯 性能優化策略 1.預編譯模 2.原生組件混合渲 3.分包加載 UniApp 的生命周期鉤子有哪些&#x…

【圖像算法 - 10】進階入門:改進 YOLO11 安全帽檢測的關鍵參數與場景適配

一、項目背景與需求 視頻全文介紹 【圖像算法 - 10】進階入門&#xff1a;改進 YOLO11 安全帽檢測的關鍵參數與場景適配今天我們使用深度學習來訓練一個安全帽檢測系統&#xff0c;基于YOLO11的安全帽檢測系統。我們使用了兩萬張圖片的數據集訓練了這次的基于YOLO11的安全帽檢…

【C 學習】04.1-類型轉換浮點數

“知道做不到就是不知道”一、類型轉換1.自動類型轉換&#xff1a;當運算符&#xff08;常見、-、*、/、%&#xff09;兩邊出現不一致的類型時&#xff0c;編譯器會自動轉換成較大的&#xff08;范圍更大&#xff09;類型。從小到大&#xff1a;char-short-int-long-long long;…

基于反事實對比學習的魯棒圖像表征|文獻速遞-醫學影像算法文獻分享

Title題目Robust image representations with counterfactual contrastive learning基于反事實對比學習的魯棒圖像表征01文獻速遞介紹醫學影像中的對比學習已成為利用未標記數據的有效策略。這種自監督學習方法已被證明能顯著提升模型跨領域偏移的泛化能力&#xff0c;并減少訓…

機器學習(5):樸素貝葉斯分類算法

貝葉斯的核心思想就是&#xff0c;誰的概率高就歸為哪一類。貝葉斯推論P(A):先驗概率。即在B事件發生之前&#xff0c;我們對A事件概率的一個判斷。P(A|B)&#xff1a;后驗概率。即在B事件發生之后&#xff0c;我們對A事件概率的重新評估。P(B|A)/P(B)&#xff1a;可能性函數。…

Docker 容器內進行 frp 內網穿透

開始之前需要有一臺可以進行公網訪問的服務器 下載安裝 frp 這個直接到 github 官網就可以下載了 點擊Releases 就可以查看到可以下載的源&#xff0c;根據自己電腦的型號進行選擇就好了。 linux服務器上下載 如果是在linux的服務器上的話可以直接通過wget進行下載 例如&a…

復制網頁文字到Word、WPS文字?選中后直接拖放

要把網頁、PDF或其他應用中的文字內容復制到Word、WPS文字、記事本等&#xff0c;不一定要先復制、再粘貼&#xff0c;也可以選中文字后直接拖動到目標位置即可。多次操作&#xff0c;可以把窗口并排再拖動。如果你經常需要在不同應用之間引用文字&#xff0c;不妨試一試。操作…

Starrocks中的 Query Profile以及explain analyze及trace命令中的區別

背景 本文基于Starrocks 3.5.5 現有公司因為業務的不同&#xff0c;可能會更加關系單個SQL 的RT&#xff0c;因為如果一個SQL的RT比較大的話&#xff0c;影響的就是這個業務&#xff0c;從而影響收入&#xff0c;所以對于這方面我們就比較關心&#xff0c; 而最近在基于Starro…

網絡 —— 筆記本(主機)、主機虛擬機(Windows、Ubuntu)、手機(筆記本熱點),三者進行相互ping通

背景介紹最近在筆記本電腦上的虛擬機(Ubuntu、Windows Server搭配)上部署了"WD"開源手游服務器(舊版本)&#xff0c;手機連接上了筆記本電腦開啟的WIFI熱點&#xff0c;同時手機上安裝了"WD"手游客戶端。于是首先得保證網絡相互暢通才能玩游戲&#xff0c;…

裸露土堆識別準確率↑32%:陌訊多模態融合算法在生態監測的實戰解析

原創聲明本文為原創技術解析文章&#xff0c;涉及技術參數及架構描述均參考《陌訊技術白皮書》&#xff0c;禁止任何形式的轉載與抄襲。一、行業痛點&#xff1a;裸露土堆識別的現實挑戰在生態環境保護、建筑工地監管等場景中&#xff0c;裸露土堆的精準識別是遏制揚塵污染、防…

網站從HTTP升級到HTTPS網址方法

將網站從HTTP升級到HTTPS涉及幾個關鍵步驟&#xff0c;以確保安全連接以及用戶和搜索引擎的平穩過渡。獲取并安裝SSL/TLS證書&#xff1a;1、從CA機構授權提供商Gworg獲取SSL/TLS證書。選項包括域名驗證(DV)、組織驗證(OV)和擴展驗證(EV)證書&#xff0c;驗證嚴格度各不相同&am…

WaitForSingleObject 函數參數影響及信號處理分析

一、第二個參數&#xff08;超時時間&#xff09;的影響 DWORD result WaitForSingleObject(hHandle, 1000);中的第二個參數1000表示等待超時時間為1000毫秒&#xff08;1秒&#xff09;&#xff0c;其核心影響如下&#xff1a; 1. 函數行為控制 立即返回&#xff1a;若對象已…

dbeaver導入數據及配置講解

導入數據教程&#xff1a; 前提.csv文件&#xff1a;且只能導入一個sheet點擊下一步選中導入的.csv文件對應好數據字段和表字段&#xff0c;感覺不需要導入的可以skip配置一下&#xff0c;下面有介紹&#xff1a;以下為你詳細解析這些數據加載相關功能的含義與作用&#xff1a;…

JAVA學習筆記 自增與自減的使用-006

目錄 1 基本概述 2 自增與自減的用法 2.1單獨使用 2.2 參與運算 3 思考與練習 3.1 基礎題 3.2 中等題 3.3 進階題 4 總結 源計劃&#xff1a;我從來不認為自己的成功過程有多心酸&#xff0c;只是心中不懼失敗&#xff0c;能夠承受別人不能接受的失望而已&#xff01;…

從LCM到SomeIP,再到DDS:技術演進與工作原理剖析

文章目錄一、LCM&#xff1a;輕量級通信與編組庫工作原理C 代碼示例局限性二、SomeIP&#xff1a;面向服務的可擴展中間件工作原理C 代碼示例優勢與特點三、DDS&#xff1a;數據分發服務工作原理C 代碼示例優勢與應用場景四、技術演進總結在分布式系統通信領域&#xff0c;技術…

Redis里面什么是sdshdr,可以詳細介紹一下嗎?

文章目錄為什么 Redis 不直接使用 C 語言的字符串&#xff1f;sdshdr 的結構sdshdr 的不同類型sdshdr 帶來的優勢總結我們來詳細解析一下 Redis 的核心數據結構之一&#xff1a; sdshdr。sdshdr 是 “Simple Dynamic String header” 的縮寫&#xff0c;意為“簡單動態字符串頭…

RocketMq如何保證消息的順序性

文章目錄1.順序消息的全流程1.1 發送階段&#xff1a;消息分區1.2.存儲階段&#xff1a;順序寫入1.3.消費階段&#xff1a;串行消費2.第三把鎖有什么用?3.順序消費存在的問題和Kafka只支持同一個Partition內消息的順序性一樣&#xff0c;RocketMQ中也提供了基于隊列(分區)的順…