自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

數(shù)據(jù)庫 MySQL
本章的內(nèi)容就是為了幫助大家看懂EXPLAIN語句的各個輸出項都是干嘛使的,從而可以有針對性的提升我們查詢語句的性能。

一條SQL查詢語句在經(jīng)過MySQL查詢優(yōu)化器處理后會生成一個所謂的執(zhí)行計劃,這個執(zhí)行計劃展示了具體執(zhí)行查詢的方式,比如多表連接的順序是什么,對于每個表采用什么訪問方法來具體執(zhí)行查詢等等。

本章的內(nèi)容就是為了幫助大家看懂EXPLAIN語句的各個輸出項都是干嘛使的,從而可以有針對性的提升我們查詢語句的性能。

學(xué)習(xí)步驟

定位慢查詢。使用explain分析。

定位慢查詢SQL

在平時工作中,我想你肯定遇到過一條sql發(fā)出去了,但是等了好久才出現(xiàn)了返回值,這不僅僅影響了測試速度也大大降低了開發(fā)效率。所以我們有必要學(xué)習(xí)sql慢查詢定位。

一般定位慢查詢會有兩種解決方案:

根據(jù)慢查詢?nèi)罩径ㄎ?/p>

使用show processlist定位,查詢正在執(zhí)行的慢查詢

NO.1 慢查詢?nèi)罩径ㄎ唤馕?/strong>

MySQL 的慢查詢?nèi)罩居涗浀膬?nèi)容是:在 MySQL 中響應(yīng)時間超過參數(shù) long_query_time(單位秒,默認值 10)設(shè)置的值并且掃描記錄數(shù)不小于 min_examined_row_limit(默認值0)的語句。

NOTE:默認情況下,慢查詢?nèi)罩局胁粫涗浌芾碚Z句,如果需要記錄的請做如下設(shè)置,設(shè)置log_slow_admin_statements = on 讓管理語句中的慢查詢也會記錄到慢查詢?nèi)罩局小DJ情況下,也不會記錄查詢時間不超過 long_query_time 但是不使用索引的語句,可通過配置
log_queries_not_using_indexes = on 讓不使用索引的 SQL 都被記錄到慢查詢?nèi)罩局校词共樵儠r間沒超過 long_query_time 配置的值)。

慢查詢?nèi)罩臼褂貌襟E:

使用慢查詢?nèi)罩?,一般分為四步?/p>

開啟慢查詢?nèi)罩尽?/p>

設(shè)置慢查詢閥值。

確定慢查詢?nèi)罩韭窂健?/p>

確定慢查詢?nèi)罩镜奈募?/p>

開啟慢查詢?nèi)罩荆J是關(guān)閉的):

 

  1. mysql> set global slow_query_log = on 
  2. Query OK, 0 rows affected (0.00 sec) 

 

設(shè)置慢查詢時間限制(查詢時間只要大于這個值都將記錄到慢查詢?nèi)罩局?,單位:秒)?/p>

 

  1. mysql> set global long_query_time = 1;  
  2. Query OK, 0 rows affected (0.00 sec) 

 

確定慢查詢?nèi)罩韭窂剑?/p>

  1. mysql> show global variables like "datadir"

確定慢查詢?nèi)罩疚募?/p>

 

  1. mysql> show global variables like "slow_query_log_file"

NOTE:慢查詢query time設(shè)置小技巧:線上業(yè)務(wù)一般建議把 long_query_time 設(shè)置為 1 秒,如果某個業(yè)務(wù)的 MySQL 要求比較高的 QPS,可設(shè)置慢查詢?yōu)?0.1 秒。發(fā)現(xiàn)慢查詢及時優(yōu)化或者提醒開發(fā)改寫。一般測試環(huán)境建議 long_query_time 設(shè)置的閥值比生產(chǎn)環(huán)境的小,比如生產(chǎn)環(huán)境是 1 秒,則測試環(huán)境建議配置成 0.5 秒。便于在測試環(huán)境及時發(fā)現(xiàn)一些效率低的 SQL。甚至某些重要業(yè)務(wù)測試環(huán)境 long_query_time 可以設(shè)置為 0,以便記錄所有語句。并留意慢查詢?nèi)罩镜妮敵?,上線前的功能測試完成后,分析慢查詢?nèi)罩久款愓Z句的輸出,重點關(guān)注 Rows_examined(語句執(zhí)行期間從存儲引擎讀取的行數(shù)),提前優(yōu)化。

接下來在確定慢查詢?nèi)罩竞罂梢酝ㄟ^:tail -n5
/data/mysql/mysql-slow.log 命令查看

這里對上方的執(zhí)行結(jié)果詳細描述一下:

tail -n5:只查看慢查詢文件的最后5行

Time:慢查詢發(fā)生的時間

User@Host:客戶端用戶和IP

Query_time:查詢時間

Lock_time:等待表鎖的時間

Rows_sent:語句返回的行數(shù)

Rows_examined:語句執(zhí)行期間從存儲引擎掃描的行數(shù)

上面這種方式是用系統(tǒng)自帶的慢查詢?nèi)罩静榭吹模绻X得系統(tǒng)自帶的慢查詢?nèi)罩静环奖悴榭?,小伙伴們可以使?pt-query-digest 或者 mysqldumpslow 等工具對慢查詢?nèi)罩具M行分析,這不是本節(jié)重點,不演示了。

通過 show processlist定位慢查詢

有時慢查詢正在執(zhí)行,已經(jīng)導(dǎo)致數(shù)據(jù)庫負載偏高了,而由于慢查詢還沒執(zhí)行完,因此慢查詢?nèi)罩具€看不到任何語句。此時可以使用 show processlist 命令判斷正在執(zhí)行的慢查詢。show processlist 顯示哪些線程正在運行。如果有 PROCESS 權(quán)限,則可以看到所有線程。否則,只能看到當(dāng)前會話的線程。

知識擴展:如果不使用 FULL 關(guān)鍵字,在 info 字段中只顯示每個語句的前 100 個字符,如果想看語句的全部內(nèi)容可以使用 full 修飾(show full processlist)。

這里對上面結(jié)果重點參數(shù)解釋一下:

Time:表示執(zhí)行時間

Info:表示 SQL 語句

我們這里可以通過它的執(zhí)行時間(Time)來判斷是否是慢 SQL。

EXLPAIN分析慢查詢

分析 SQL 執(zhí)行效率是優(yōu)化 SQL 的重要手段,通過上面講的兩種方法,定位到慢查詢語句后,我們就要開始分析 SQL 執(zhí)行效率了,子曾經(jīng)曰過:“工欲善其事,必先利其器”,我們可以通過 explain、show profile 和 trace 等診斷工具來分析慢查詢。本節(jié)先講解 explain 的使用,在下節(jié)將分享 show profile 和 trace 的使用。

Explain 可以獲取 MySQL 中 SQL 語句的執(zhí)行計劃,比如語句是否使用了關(guān)聯(lián)查詢、是否使用了索引、掃描行數(shù)等??梢詭臀覀冞x擇更好地索引和寫出更優(yōu)的 SQL 。使用方法:在查詢語句前面加上 explain 運行就可以了。

創(chuàng)建一個測試表并且插入部分數(shù)據(jù)用于測試

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

在上圖表中我們創(chuàng)建了3個索引

PRIMARY KEY (`id`), 聚集索引 KEY `idx_a` (`a`),非聚集索引 KEY `idx_b_c` (`b`,`c`)非聚集索引 d列沒有創(chuàng)建索引

執(zhí)行三個SQL分別得到如下結(jié)果

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

Explain字段詳解(重點關(guān)注加粗項):

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

這幾列重點解讀:

1. select_type重點解讀

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

2. type重點解讀:查詢性能從上到下依次是最好到最差

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

3. extra重點解讀

MySQL優(yōu)化:定位慢查詢的兩種方法以及使用explain分析SQL

總結(jié)

今天我分享的關(guān)于定位慢 SQL 及使用 explain 分析慢 SQL 到這里就結(jié)束了。

本節(jié)知識點總結(jié)如下:

學(xué)習(xí)了兩種慢查詢定位方法。掌握了explain關(guān)鍵列的含義以及使用方法,這也是工作中最常用的方法。在工作中及面試時,SQL 性能優(yōu)化都是我們經(jīng)常遇到的問題,要想做好性能優(yōu)化,我們必須學(xué)會使用 SQL 優(yōu)化時需要的工具,進行定位和分析。

由于篇幅的問題,本小節(jié)只介紹了 explain 工具的使用,在下節(jié)將補充另外兩種分析慢查詢的工具:show profile 和 trace。在后面我會再講解 SQL 優(yōu)化的一些知識點,相信小伙伴們 SQL 性能優(yōu)化時一定可以越來越熟練。

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2010-11-09 13:09:58

SQL Server分

2011-06-28 08:32:40

MySQL慢查詢?nèi)罩?/a>

2010-11-23 11:53:37

MySQL查詢表字段

2023-11-30 15:37:37

MySQL數(shù)據(jù)庫

2010-11-24 14:36:25

修復(fù)mysql表

2011-03-30 17:04:24

MySQL添加用戶

2010-11-12 11:44:37

SQL Server刪

2010-09-13 13:05:03

sql server分

2010-11-10 13:22:41

SQL Server備

2010-09-07 15:38:42

CSS絕對定位浮動

2010-08-04 17:41:52

掛載NFS

2010-07-01 12:29:27

SQL Server重

2010-05-24 15:08:46

MySQL訪問權(quán)限

2010-11-09 11:11:12

SQL Server查

2020-07-01 17:05:05

Python方差分析代碼

2021-04-07 10:38:43

MySQL數(shù)據(jù)庫命令

2009-09-25 14:04:09

Hibernate eHibernate h

2010-04-13 09:50:44

Oracle跟蹤

2022-07-14 14:46:51

數(shù)據(jù)庫SQL系統(tǒng)設(shè)計

2010-09-02 10:36:51

SQL刪除
點贊
收藏

51CTO技術(shù)棧公眾號