MySQL慢查詢優化策略

一、問題定位

1、慢查詢日志

-- 查看當前設置
SHOW VARIABLES LIKE 'slow_query%';
?
-- 開啟慢查詢日志(my.cnf永久配置)
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 ?-- 超過1秒的查詢
log_queries_not_using_indexes = 1 -- 記錄未使用索引的查詢
?
-- 動態設置
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

2、分析工具

工具使用場景命令示例
mysqldumpslow官方自帶,基礎分析mysqldumpslow -s t -t 10 -g 'select' /path/to/slow.log
pt-query-digest高級分析,生成詳細報告pt-query-digest slow.log > report.txt
Percona Toolkit專業級分析,支持多維度統計pt-query-digest --filter '$event->{arg} =~ m/SELECT/i' slow.log

二、優化方案

對于慢查詢SQL的優化方式中,首先需要定位慢查詢SQL到底是為什么那么慢。EXPLAIN命令可以查看慢查詢SQL的執行計劃。

1、索引優化

針對慢查詢SQL,一大部分SQL慢查詢的原因是沒有命中索引或者索引設計不合理或者SQL語句不合理導致全盤掃描或者索引失效。

對于索引使用盡量遵守以下原則以提高索引使用效率。

  • 查詢頻次較高且數據量大的表建立索引;索引選擇使用頻次較高,過濾效果好的列或者組合;

  • 使用短索引;節點包含的信息多,較少磁盤 IO 操作;比如: smallint , tinyint ;

  • 對于很長的動態字符串,考慮使用前綴索引;

  • 對于組合索引,考慮最左側匹配原則、覆蓋索引;

  • 盡量選擇區分度高的列作為索引;該列的值相同的越少越好;

  • 盡量擴展索引,在現有索引的基礎上,添加復合索引;最多 6 個索引;

  • 不要 select *; 盡量只列出需要的列字段;方便使用覆蓋索引;

  • 索引列,列盡量設置為非空;

對于索引的使用盡量滿足上述各項原則。除上述規則外還要注意一些情況是否造成索引失效導致全盤掃描。

索引失效的情況:

  • select ... where A and B 若 A 和 B 中有一個不包含索引,則索引失效;

  • 索引字段參與運算,則索引失效;例如: from_unixtime(idx) = '2021-04-30'; 改成 idx = unix_timestamp("2021-04-30");

  • 索引字段發生隱式轉換,則索引失效;例如:將列隱式轉換為某個類型,實際等價于在索引列上作用了隱式轉換函數;

  • LIKE 模糊查詢,通配符 % 開頭,則索引失效;

  • 組合索引中,沒使用第一列索引,索引失效;

  • 在索引字段上使用NOT <> != 索引失效;例如:id <> 0可以修改為 id > 0 or id < 0;

2、SQL語句子查詢優化

????????對于SQL語句盡量不要使用子查詢,對應優化方式可以將in 和 not in 優化為聯合查詢。并且在沒有必要使用聯合查詢時就盡量不用。可以通過進行單表查詢后返回數據在程序中進行join、merge操作數據。

?更多資料:0voice · GitHub

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

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

相關文章

如何使用 ASP.NET Core 創建基于角色的 Web API

在使用 ASP.NET Core 構建基于角色的 Web API 時&#xff0c;代碼優先方法是一種強大而高效的方法。使用它&#xff0c;我們可以在代碼中定義數據模型和關系&#xff0c;然后自動生成相應的數據庫模式。這會帶來什么&#xff1f;當然是更快的開發周期和更大的靈活性。為什么&am…

無字母數字命令執行

寫在前面 說白了數字還是好構造的&#xff0c;bash的算數拓展&#xff01; base64命令 這玩意說白了有點雞肋&#xff0c;因為你得知道flag的文件名和位置&#xff01; base64 flag.php這個會將flag.php里面的內容給base64編碼輸出來。那么如何用無字母數字構造呢&#xff1f; …

AAB包轉apks轉apk

1. 下載bundletool-all-1.17.2.jar&#xff08;不一定非得1.17.2&#xff0c;可以其他版本&#xff09; https://github.com/google/bundletool/releases/tag/1.17.2 2. 在aab、keystore、bundletool-all-1.17.2.jar的目錄下&#xff0c;運行指令 java -jar bundletool-all-1…

從零開始:用uv構建并發布一個Python CLI應用,集成CI/CD自動化發布與Docker容器化部署

使用uv構建并發布一個完整的Python CLI應用 概述 初始化項目 編寫應用代碼 定義項目 (`pyproject.toml`) 使用`uv`安裝依賴 本地運行和測試 依賴鎖定 構建 發布 生產環境實踐之CI/CD 創建工作流配置文件 配置GitHub Secrets 創建和推送tag 驗證發布 生產環境實踐之Docker 創建D…

如何在Qt中使用周立功USB轉CAN卡

如何在 Qt 中使用周立功 USB 轉 CAN 卡 文章目錄如何在 Qt 中使用周立功 USB 轉 CAN 卡一、簡介二、準備工作三、使用四、運行效果五、寫在最后?一、簡介 最近在工程中用到了周立功的 USB 轉 CAN 卡&#xff0c;需求是要通過上位機進行通信&#xff0c;因此有了這篇文章。 有…

JavaScript 源碼剖析:從字節碼到執行的奇妙旅程

JavaScript&#xff0c;這門風靡全球的腳本語言&#xff0c;以其靈活性和跨平臺性征服了無數開發者。我們每天都在使用它&#xff0c;但它在后臺是如何工作的&#xff1f;一段看似簡單的JS代碼&#xff0c;在執行之前究竟經歷了哪些“變形記”&#xff1f;今天&#xff0c;讓我…

FPGA—硬件電路一旦上電配置完成,各個功能模塊會并行地持續工作

1.示例代碼參考這段代碼是用 Verilog 編寫的一個 LED 閃爍控制模塊&#xff0c;主要實現了 LED 按一定時間間隔循環移位閃爍的功能。下面詳細解釋其架構組成&#xff1a;模塊定義與端口聲明模塊名為 led_flash&#xff0c;包含三個端口&#xff1a;sys_clk&#xff1a;輸入端口…

從零到上線:Docker、Docker Compose 與 Runtime 安裝部署全指南(含實戰示例與應用場景)

文章目錄一、Docker 安裝1. Ubuntu / Debian&#xff08;官方倉庫&#xff09;2. RHEL / CentOS / Rocky / AlmaLinux3. 驗證4. macOS / Windows&#xff08;Docker Desktop&#xff09;二、Docker Compose&#xff08;V2&#xff09;安裝與基本用法1) 驗證2) 最小示例&#xf…

Java基礎篇02:基本語法

1 注釋 注釋是寫在程序中對代碼進行解釋說明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。注釋分為三種&#xff1a;單行注釋、多行注釋、文檔注釋注釋不影響代碼的執行&#xff1a; 原因是編譯后的文件已經沒有注釋了// 這是單行注釋&#xff1a;。通常…

【SECS/GEM 】SECS/GEM 日志管理相關的消息

明白 ? 在 SECS/GEM 架構里&#xff0c;設備日志&#xff08;Equipment Logging 主要涉及 事件日志&#xff08;Event Log&#xff09;、報警日志&#xff08;Alarm Log&#xff09;、配方操作日志&#xff08;Recipe Log&#xff09;、以及用戶操作/命令日志。這些日志通過 S…

ragas 框架使用Chat-GLM模型報API 調用參數有誤,請檢查文檔

ragas 框架使用Chat-GLM模型報API 調用參數有誤&#xff0c;請檢查文檔解決方案 from ragas.llms import LangchainLLMWrapper # 點擊LangchainLLMWrapper 進入這個類找到這個方法直接 return 0.1出現問題原因 ChatGLM 不支持設置temperature等于0&#xff0c;默認的值太小了

Kaggle - LLM Science Exam 大模型做科學選擇題

Kaggle - LLM Science Exam Science Exam Simple Approach w/ Model Hub | Kaggle Platypus2-70B with Wikipedia RAG | Kaggle 5個選項只有一個選項正確&#xff0c;目標&#xff1a;回答一個選項序列&#xff08;只有前三個有效&#xff09; 輸出正確選項 &#xff08;可…

貪吃蛇魚小游戲抖音快手微信小程序看廣告流量主開源

核心優勢&#xff1a;為流量主運營者與新手量身打造 1. 為流量主運營者破解成本困局 本地化運行&#xff0c;零服務器成本&#xff1a;數據運行與存儲全程在用戶手機本地完成&#xff0c;無需部署服務器及后臺系統&#xff0c;徹底擺脫服務器租賃、維護等硬性支出&#xff0c;…

PDF Reader 編輯閱讀工具(Mac中文)

原文地址&#xff1a;PDF Reader 編輯閱讀 for Mac v5.2.0 PDF Reader Pro Mac&#xff0c;是一款PDF編輯閱讀&#xff0c;PDF Reader Pro讓您直接在 Mac 上進行PDF文件閱讀、筆記、編輯、轉換、創建PDF、簽署PDFs、填寫PDF Forms表單、設置密碼、合并拆分文件、水印等等&…

Django REST framework:SimpleRouter 使用指南

1. SimpleRouter 是什么&#xff1f; SimpleRouter 是 DRF&#xff08;Django REST framework&#xff09;提供的路由器&#xff0c;能根據 ViewSet 自動生成標準的 REST 路由&#xff0c;包括&#xff1a; GET /resources/ → 列表&#xff08;list&#xff09;POST /resource…

覆蓋Transformer、GAN:掩碼重建正在重塑時間序列領域!

隨著大數據與深度學習的發展&#xff0c;時間序列分析的建模能力顯著提升&#xff0c;而掩碼重建作為一種自監督學習范式&#xff0c;已成為提升序列表征能力的重要技術。該方法通過隨機掩碼部分數據并重建原始序列&#xff0c;迫使模型挖掘時序依賴性與潛在模式&#xff0c;在…

用AI做TikTok影視解說,全流程全自動成片,不懂外語也能做全球矩陣!

多語種解說&#xff1a; 短劇出海狂吸美金 多語種解說搶先機 TikTok、YouTube等平臺&#xff0c;尤其在非英語市場&#xff0c;內容供給仍遠遠不足&#xff0c;每一個小語種市場都是潛在藍海。 有人用英語講仙俠、西語講爽劇、日語講宮斗、阿語講懸疑&#xff0c;一夜漲粉百…

解密大語言模型推理:輸入處理背后的數學與工程實踐

解密大語言模型推理&#xff1a;輸入處理背后的數學與工程實踐當你向ChatGPT提問時&#xff0c;短短幾秒內就能獲得流暢的回答&#xff0c;這背后隱藏著怎樣的技術魔法&#xff1f;答案在于大語言模型高效推理過程中精妙的輸入處理機制。在現代大語言模型推理中&#xff0c;輸入…

02、連接服務器的幾種方式

02、連接服務器的幾種方式 1、Xshell 適用于Windows https://www.xshell.com/en/free-for-home-school/ 2、Termius 適用于MacOS 直接蘋果商店下載即可 3、IDEA 連接 Tools - Deployment - Browse Remote Host 1、打開Browse Remote Host2、添加服務3、輸入服務器連接信息并測試…

高并發系統設計方案(直播場景)

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。 1. 微服務拆分 …