MySQL語句優化案例

1.案例in查詢條件很慢

其中in中共115個

select 
id,detail_id,request,response,utime,ctime 
from response_detaill 
where detaill_id in
(26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 26371974, 26400390, 26371972, 26371978,26371976, 26371982, 26371980, 26400178, 26372018, 26400435, 26372016, 26402486, 
26372022, 26372534, 26372020, 26372026, 26372024, 26372030, 26404286, 26404287, 
26372028, 26404285, 26372002, 26400163, 26400160, 26372000, 26372006, 26372004, 
26400165, 26372010, 26372008, 26372014, 26372012, 26372050, 26372048, 26404290, 
26404291, 26404288, 26404289, 26404294, 26404292, 26404293, 26372042, 26400201, 
26372044, 26372338, 26372082, 26372346, 26468863, 26372064, 26372836, 26372068, 
26400235, 26402028, 26400018, 26400019, 26400022, 26400020, 26400024, 26372892, 
26372124, 26372098, 26372864, 26400011, 26400520, 26400012, 26372402, 26400048, 
26402356, 26400315, 26468922, 26400056, 26372926, 26400063, 26372668, 26372156, 
26372128, 26400042, 26400046, 26372142, 26400594, 26372434, 26402129, 26400593, 
26400071, 26400586, 26372426, 26400335, 26400588, 26371954, 26371952, 26371958, 
26371956, 26371962, 26371960, 26371966, 26371964, 26402401, 26372708, 26371946, 
26371944, 26371950, 26371948)

慢查詢監控平臺:

查看該sql語句的執行計劃,type:range指的是有范圍的索引掃描,相對于index的全索引掃描,它有范圍限制,因此要優于index。關于range比較容易理解,出現了range,則一定是基于索引的。

分析原因:

執行計劃中顯示,是使用了索引,所以不是索引失效的問題

回表次數增加:如果?IN?列表中的值很多,即使使用了索引,也需要進行大量的回表操作,會導致查詢變慢,需要的字段是大文本,無法建立索引,使用覆蓋索引優化。

網絡傳輸:100M的數據量,增加了傳輸耗時

內存緩沖限制:Mysql中一頁數據是16KB,每條數據需要多個分頁數據,增加了磁盤IO

綜合來看,是數據量太大導致,考慮只查詢需要的字段,不用返回所有的字段,減少數據量。

修改:

select 
id,detail_id,response,ctime 
from response_detaill 
where detaill_id in
(26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 26371974, 26400390, 26371972, 26371978,26371976, 26371982, 26371980, 26400178, 26372018, 26400435, 26372016, 26402486, 
26372022, 26372534, 26372020, 26372026, 26372024, 26372030, 26404286, 26404287, 
26372028, 26404285, 26372002, 26400163, 26400160, 26372000, 26372006, 26372004, 
26400165, 26372010, 26372008, 26372014, 26372012, 26372050, 26372048, 26404290, 
26404291, 26404288, 26404289, 26404294, 26404292, 26404293, 26372042, 26400201, 
26372044, 26372338, 26372082, 26372346, 26468863, 26372064, 26372836, 26372068, 
26400235, 26402028, 26400018, 26400019, 26400022, 26400020, 26400024, 26372892, 
26372124, 26372098, 26372864, 26400011, 26400520, 26400012, 26372402, 26400048, 
26402356, 26400315, 26468922, 26400056, 26372926, 26400063, 26372668, 26372156, 
26372128, 26400042, 26400046, 26372142, 26400594, 26372434, 26402129, 26400593, 
26400071, 26400586, 26372426, 26400335, 26400588, 26371954, 26371952, 26371958, 
26371956, 26371962, 26371960, 26371966, 26371964, 26402401, 26372708, 26371946, 
26371944, 26371950, 26371948)

修改之后查詢時間變為100ms,由原來的1s變為100ms,由此可見,是因為數據太大導致網絡延時與Mysql的內存限制

還可以修改為連表查詢join

2. 分頁查詢很慢

背景:負責的項目中慢查詢數量報警,通過數據庫分析診斷平臺可以看出有一條sql命令慢查詢數量超過閾值,是一個分頁查詢,需要查詢某個范圍內的數據,使用limit,深度分頁導致慢查詢。

select * from flow where group_id=3290 limit 150000,100;

分析:這條查詢語句一直都沒有問題,最近突然有問題,發現最近幾次使用的數據集合都是很大的,導致每次分頁limit偏移量較大,平均查詢時間>2s。explain分析執行計劃,使用了非唯一索引。即使有索引,索引只能加速定位,但無法直接“跳轉到第 N 條”(因為索引存儲的是鍵值,而不是行號)。

解決:采用游標分頁,將查詢上一頁的最大id返回,下一頁的查詢基于此id

select * from flow where group_id=3290 AND id>150000 limit 100;

深度分頁的本質:

LIMIT offset, size 的工作原理:
數據庫會先讀取 offset + size 條數據,再丟棄前 offset 條。

第一條查詢實際加載了 5000600 行數據,再丟棄前 5000000 行。

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

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

相關文章

能行為監測算法:低成本下的高效管理

AI監控智慧公司管理:降本增效的實踐與突破一、背景:經濟壓力下的管理轉型需求在經濟下行周期,企業面臨人力成本攀升、管理效率低下、安全風險頻發等多重挑戰。傳統監控依賴人工巡檢,存在響應滯后、誤判率高、數據孤島等問題&#…

當前(2024-07-14)視頻插幀(VFI)方向的 SOTA 基本被三篇頂會工作占據,按“精度-速度-感知質量”三條線總結如下,供你快速定位最新范式

當前(2024-07-14)視頻插幀(VFI)方向的 SOTA 基本被三篇頂會工作占據,按“精度-速度-感知質量”三條線總結如下,供你快速定位最新范式。感知質量最佳:CVPR 2024 ? PerVFI ? 關鍵詞:…

開源 python 應用 開發(七)數據可視化

最近有個項目需要做視覺自動化處理的工具,最后選用的軟件為python,剛好這個機會進行系統學習。短時間學習,需要快速開發,所以記錄要點步驟,防止忘記。 鏈接: 開源 python 應用 開發(一&#xf…

基于深度學習的情感分析模型:從文本數據到模型部署

前言 情感分析(Sentiment Analysis)是自然語言處理(NLP)領域中的一個重要應用,它通過分析文本數據來判斷文本的情感傾向,例如正面、負面或中性。隨著社交媒體的興起,情感分析在市場調研、品牌管…

使用python 實現一個http server

下面是一個使用 Python 內置庫 http.server 的簡單 HTTP 服務器實現。不需要安裝任何第三方庫,非常適合做演示或開發測試用。 from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self…

Redis技術筆記-主從復制、哨兵與持久化實戰指南

目錄 前言 一、Redis主從復制 (一)Redis主從復制介紹 (二)基本環境準備 (三)工作原理 (四)結構模式 (五)一主一從(無密碼) 配置…

sundog公司的SilverLining SDK庫實現3d動態云層和下雨、下雨、雨夾雪效果

OSG系列文章目錄 文章目錄OSG系列文章目錄前言一、3d動態云與下雨、下雪效果不能同時出現二、3d動態云與下雨、下雪效果不能同時出現的原因三、解決辦法:前言 先看下效果:下雨 效果:下雪 效果:雨夾雪 🌤? Sundo…

Python:簡易的 TCP 服務端與客戶端示例

下面是一個完整的 TCP 服務端與客戶端示例,適用于 Python 3,使用 socket 模塊,并正確處理了中文傳輸與異常情況,支持基本的多輪通信。TCP 服務端(server_tcp.py)import socket HOST 127.0.0.1 # 監聽本地…

文心一言 4.5 開源深度剖析:中文霸主登場,開源引擎重塑大模型生態

> 百度用一場徹底的開源風暴,宣告中文大模型進入性能與普惠并重的新紀元——這里沒有技術黑箱,只有開發者手中躍動的創新火花。 2025年,當全球大模型競賽進入深水區,百度文心一言4.5的開源如同一顆重磅炸彈,徹底打破了“閉源即領先”的固有認知。這一次,中國團隊不…

解決“Windows 無法啟動服務”問題指南

錯誤1067:進程意外終止一、重啟計算機有時系統出現臨時性的服務故障,重啟計算機就可以有效解決問題。需要注意的是,在重啟之前,需要保存好所有未保存的工作,以免數據丟失。重啟完成后,再次嘗試啟動相關服務…

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝 原因 項目需要使用Deepseek-r1-distill-qwen-32b來做訓練,在此記錄 測試環境 服務器配置 型號:G5680V2 CPU:CPU 4Kunpeng 920-5250 NPU:NP…

消息中間件(Kafka VS RocketMQ)

目錄 一、概要介紹 二、架構與原理 三、消費模式 1、Kafka—純拉模式 2、RocketMQ—拉模式 3、RocketMQ—推模式 4、模式對比 四、特殊消息 1、順序消息 2、消息過濾 3、延遲消息 4、事務消息 5、廣播消息 五、高吞吐 六、高可用 七、高可靠 一、概要介紹 Apa…

MyBatis級聯查詢深度解析:一對多關聯實戰指南

MyBatis級聯查詢深度解析:一對多關聯實戰指南在實際企業級開發中,單表操作僅占20%的場景,而80%的業務需求涉及多表關聯查詢。本文將以一對多關系為例,深入剖析MyBatis級聯查詢的實現原理與最佳實踐,助你掌握高效的數據…

搜索框的顯示與隱藏(展開與收起)

效果如下直接上代碼v-if"showAll || 0 < 3" 的意思是&#xff1a;如果 showAll 為 true&#xff0c;或者 0 小于 3&#xff0c;這個表單項就會顯示。<el-form :inline"true" class"demo-form-inline" size"default" label-width…

01 啟動流程實例

前言本文基于 Activiti 7.0.0.GA 源碼&#xff0c;研究 Activiti 如何啟動一個流程實例。審批流程圖如下圖&#xff0c;在此流程圖中&#xff0c;存在兩個UserTask節點&#xff0c;第一個節點是主管審批&#xff0c;第二個節點是產品經理審批&#xff0c;兩個節點中間有一個排他…

LeetCode--47.全排列 II

解題思路&#xff1a;1.獲取信息&#xff1a;給定一個可包含重復數字的序列&#xff0c;按任意順序返回所有不重復的全排列提示信息&#xff1a;1 < nums.length < 8-10 < nums[i] < 102.分析題目&#xff1a;相較于46題&#xff0c;它多限制了一個條件&#xff0c…

vue3 服務端渲染時請求接口沒有等到數據,但是客戶端渲染是請求接口又可以得到數據

原因是: 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/x-www-form-urlencoded; charsetUTF-8’ 直接返回錯誤的code 200000 增加 data: {} 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/json; charsetUTF-8’ 服務端請求就可以得到數據 expo…

Linux 文件操作命令大全:從入門到精通的實用指南

Linux 文件操作命令大全&#xff1a;從入門到精通的實用指南 在 Linux 系統中&#xff0c;文件操作是日常工作的核心內容之一。無論是開發者、運維工程師還是 Linux 愛好者&#xff0c;掌握常用的文件操作命令都能極大提升工作效率。本文將詳細介紹 Linux 系統中最常用的文件操…

Linux開發利器:探秘開源,構建高效——基礎開發工具指南(上)【包管理器/Vim】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

基于遷移學習的培養基配方開發方法

本文為學習筆記&#xff0c;原文專利&#xff1a; 中國專利公布公告 然后輸入 202110622279.7 概覽 一、問題背景 傳統培養基開發痛點&#xff1a; 數據依賴&#xff1a;需大量細胞實驗&#xff08;1000配方&#xff09;訓練專用模型 遷移性差&#xff1a;A細胞模型無法直接…