Mysql總結2

Mysql慢優化

在mysql中,long_query_time的值為10,當sql語句執行的時間超過這個數值時,則會被記錄到慢查詢日志中。

Mysql語句查詢流程

1、客戶端發送sql語句到服務端;

2、服務端查看是否打開了緩存,若緩存打開,則查詢緩存,若緩存命中,則直接返回從緩存中查詢到的數據(在Msyql8.0中,已沒有緩存的概念);

3、使用分析器對sql語句進行語法分析,判斷其是否有語法錯誤;

4、通過優化器生成后續執行計劃;

5、通過執行器調用存儲引擎的接口,執行sql語句。

定位慢sql的方法

日志查詢:開啟慢查詢日志,并使用mysqldumpslow等命令分析慢查詢日志,查找到慢sql語句。

服務監控:從業務的根基監控慢sql,主要通過字節碼插樁、連接層擴展、使用ORM框架等方式,對服務中的慢sql進行監控和警示。

定位到慢sql后,通過explain命令對sql語句進行分析,查看慢sql的如何執行。

優化sql的方式

避免過多的列查詢

進行查詢時,盡量避免使用select *,使用select 列名的方式進行查詢,只查詢需要的列。

對于分頁優化,通過延遲關聯、書簽兩種方式。

延遲關聯

對于延遲關聯,在偏移量很大時,如limit 10000,10需要查詢10010條數據然后舍去前10000數據,這樣會造成不必要的查詢資源浪費,因此可使用延遲關聯,如下列sql:

select * from a where tid?= "1" limit 10000,10

該語句可被優化為先查詢所需要的id,這些必須要滿足tid="1"的條件,且limit同條件同為10000,10,因為未優化前,要先滿足tid = "1"才能查詢對應的偏移量,優化后的sql語句如下:

select * from a where id in (select id from a where tid?= "1" limit 10000,10)

in后面僅查詢了id一個屬性,因此浪費的查詢開銷更小,最后通過in只需要查詢10條需要的數據。

該方法的主要思路是查詢出需要的主鍵,然后主鍵表關聯原表即可。

書簽

對于書簽,通過記錄上一次查詢返回的最后一行數據,下一次查詢時從這個數據開始,避免了重復行的查詢,一般通過屬性>last_max_id作為條件,查詢時不需要offset,只需要查詢的數據即可。

索引優化

索引覆蓋

使用非主鍵索引查詢時需要回表,但如果索引的葉子節點中已包含了要查詢的字段,則不需要進行回表查詢,這種方法就是索引覆蓋。將需要查詢的字段與主鍵一起建立聯合索引。

避免使用<>、!=等操作符

使用上述操作符會導致索引失效,可考慮使用>、<、=、between等代替上述操作符。

適當使用前綴索引

前綴索引適用于前幾位區分度較大、字段長度很大的字段查詢,如查詢郵箱時,由于格式一般為@xxx.com,因此比較適合使用前綴索引,添加的方式:

alter table a add index index2(email(6))

對于前綴索引,無法進行

避免在索引列上使用函數

在索引列上使用函數會導致索引失效,因為首先需要計算出函數值后再進行比較等操作,這樣無法利用索引。

正確使用聯合索引

對于聯合索引的使用,需要滿足最左前綴原則(也稱最左匹配原則),指的是使用聯合索引時查詢條件從索引的最左側的列開始,不跳過中間的列。

join優化

優化子查詢

對于where、select列表中的子查詢,往往會導致性能問題,因為可能會為每一行的外層查詢執行一次子查詢,而使用join可以對其進行優化。如下列sql語句,使用子查詢的方式如下:

select * from a where id in (select id from b);

那么查詢a的每一行時,會執行子查詢select id from b,導致性能下降,此時可使用join來進行優化:

select * from a ioin b on a.id = b.id

此時連接后表中只有a、b數據表中id相等的數據行,和上述sql語句是等效的,同時減少了循環查詢的次數。

小表驅動大表

在執行 join?操作時,盡量讓行數較少的表驅動行數較多的表,這樣可以減少查詢過程中需要處理的數據量,同時連接得到的數據表的額外數據量也更少,減少了空間浪費,如下列sql語句:

select * from A left join B on A.id = B.id

其中A數據表數據量較小,B數據表數據量較大。

適當增加冗余字段

對于一些查詢頻率較高的字段,可考慮使用增加冗余字段,在查詢時不用使用join關聯其他數據表,直接查詢即可。

避免使用join關聯過多的表

一般使用join關聯不超過3個數據表。

union優化

union是用于關聯兩個或多個select查詢的結果,對于使用union查詢的語句,可將where、limit等條件查詢語句,下推到各select中,每個分支僅處理滿足條件的數據,減少了不必要的數據合并和過濾,如下列語句,在未實現條件下推時的查詢如下:

select * from(select * from aunionselect * from b
)as c
where c.id = 1; 

條件下推后,sql語句如下:

select * from a where id = 1
union 
select * from b where id = 1;

除上述方法外,還可利用索引的有序性,按照索引順序掃描得出的自然有序結果,從而避免了排序操作。

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

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

相關文章

AIGC繪畫設計基礎-建筑設計應用

一、AI及AIGC 對于AI大家都不陌生&#xff0c;但是AIGC這個概念好多人其實不大清楚。“AI”是指人工智能技術本身&#xff0c;而“AIGC”是指基于人工智能技術而生成的內容。 生成式人工智能——AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;&…

近鄰算法詳解

近鄰算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;也稱為K-近鄰算法&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;&#xff0c;是一種基本的分類和回歸方法。它的工作原理非常直觀&#xff1a;通過測量不同特征點之間的距離來進行預測。…

使用CommandLine庫創建.NET命令行應用

CommandLine是一個.NET庫&#xff0c;用于創建命令行應用程序。它提供了一種簡單的方法來解析命令行參數&#xff0c;并且可以幫助您構建一個功能強大的命令行界面。在本文中&#xff0c;我們將介紹如何使用CommandLine庫創建.NET命令行應用程序。 1. 背景 在.NET開發中&#…

SpringFramework實戰指南

二、SpringFramework實戰指南 目錄 一、技術體系結構 1.1 總體技術體系1.2 框架概念和理解 二、SpringFramework介紹 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模塊2.3 SpringFramework 主要優勢 三、Spring IoC容器和核心概念 3.1 組件和組件管理概念3…

起底震網病毒的來龍去脈

2010年&#xff0c;震網病毒被發現&#xff0c;引起世界嘩然&#xff0c;在后續的10年間&#xff0c;陸陸續續有更多關于該病毒的背景和細節曝光。今年&#xff0c;《以色列時報》和《荷蘭日報》又披露了關于此事件的更多信息&#xff0c;基于這些信息&#xff0c;我們重新梳理…

優于InstantID!中山大學提出ConsistentID:可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像

給定一些輸入ID的圖像&#xff0c;ConsistentID可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像。效果看起來也是非常不錯。 相關鏈接 Code:https://github.com/JackAILab/ConsistentID Paper&#xff1a;https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

計算機畢業設計 | springboot養老院管理系統 老人社區管理(附源碼)

1&#xff0c;緒論 1.1 背景調研 養老院是集醫療、護理、康復、膳食、社工等服務服務于一體的綜合行養老院&#xff0c;經過我們前期的調查&#xff0c;院方大部分工作采用手工操作方式,會帶來工作效率過低&#xff0c;運營成本過大的問題。 院方可用合理的較少投入取得更好…

Python數據可視化(七)

繪制 3D 圖形 到目前為止&#xff0c;我們一直在討論有關 2D 圖形的繪制方法和繪制技術。3D 圖形也是數據可視化的 一個很重要的應用方面&#xff0c;我們接下來就重點講解有關 3D 圖形的實現方法。繪制 3D 圖形通常需要導 入 mpl_toolkits 包中的 mplot3d 包的相關模塊&#x…

三、Gazebo中實現機器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\導航 vim .bashrc \先采用Nanocar嘗試導航 關閉終端&#xff1a;roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重啟終端&#xff1a; cd catkin_ws source ./devel/setu…

護網經驗面試題目原版

文章目錄 一、護網項目經驗1.項目經驗**Hvv的分組和流程**有沒有遇到過有意思的邏輯漏洞&#xff1f;有沒有自己開發過武器/工具&#xff1f;有做過代碼審計嗎&#xff1f;有0day嗎有cve/cnvd嗎&#xff1f;有src排名嗎&#xff1f;有沒有寫過技戰法有釣魚經歷嗎&#xff1f;具…

【數據結構】哈夫曼樹和哈夫曼編碼

一、哈夫曼樹 1.1 哈夫曼樹的概念 給定一個序列&#xff0c;將序列中的所有元素作為葉子節點構建一棵二叉樹&#xff0c;并使這棵樹的帶權路徑長度最小&#xff0c;那么我們就得到了一棵哈夫曼樹&#xff08;又稱最優二叉樹&#xff09; 接下來是名詞解釋&#xff1a; 權&a…

VC++位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼

VC位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、邏輯驅動器插拔產生的掩碼 dbv.dbcv_unitmask 進行分析的…

如何使用Suno:免費的AI歌曲生成器

文章目錄 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;選擇Suno AI的理由&#xff1a;核心優勢易于操作多樣化創作靈活的定價策略版權保障技術突破 如何使用Suno AI創作歌曲&#xff1f;第1步&#xff1a;注冊Suno AI賬戶第2步&#xff1a;輸入提示詞創建第 3 步&a…

作業-day-240522

思維導圖 使用IO多路復用實現并發 select實現TCP服務器端 #include <myhead.h>#define SER_IP "192.168.125.112" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket er…

脆皮之“字符函數與字符串函數”寶典

hello&#xff0c;大家好呀&#xff0c;感覺我之前有偷偷摸魚了&#xff0c;今天又開始學習啦。加油&#xff01;&#xff01;&#xff01; 文章目錄 1. 字符分類函數2. 字符轉換函數3. strlen的使用和模擬實現3.1 strlen 的使用3.1 strlen 的模擬1.計算器方法2.指針-指針的方…

Python的shutil模塊探索,文件操作的瑞士軍刀

hello&#xff0c;大家好&#xff0c;我是一點&#xff0c;專注于Python編程&#xff0c;如果你也對感Python感興趣&#xff0c;歡迎關注交流。 希望可以持續更新一些有意思的文章&#xff0c;如果覺得還不錯&#xff0c;歡迎點贊關注&#xff0c;有啥想說的&#xff0c;可以留…

每周刷題第三期

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄&#xff1a;Python 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 目錄 題目一&#xff1a;環形鏈表 題目二&#xff1a;刪除有序數組中的重復項 題目三&#xff1a;有效的括號 題…

從左上角到右下角的最小距離和

題目描述&#xff1a;給定一個二維數組matrix&#xff0c;一個人必須從左上角出發&#xff0c;最后到達右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的數字都累加就是距離累加和&#xff0c;返回最小距離累加和。 way&#xff1a;無他&#xff0c;dp[i] [j]表…

《隊列》

描述 學校體操隊到操場集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分別排成每行4、5、6人&#xff0c;都多出1人。當排成每行7人時&#xff0c;正好不多,求校體操隊至少多少人。 輸入描述 無 輸出描述 滿足要求的人數 樣例輸入…