MySQL執(zhí)行時(shí)間的查詢
上一節(jié)我們介紹了MySQL的索引,用于提高查詢效率。那么我們應(yīng)該優(yōu)化哪些庫的哪些sql呢?
答案1:肯定是查詢頻繁的數(shù)據(jù)庫和查詢執(zhí)行時(shí)間長(zhǎng)的sql?,F(xiàn)在我們一一來解決這個(gè)問題。
- 首先如何判斷一個(gè)數(shù)據(jù)庫是否是查詢頻繁呢?
我們可以看它的狀態(tài)信息
SHOW GLOBAL STATUS LIKE 'Com_______';
我們主要關(guān)注:
- Com_delete: 刪除次數(shù)
- Com_insert: 插入次數(shù)
- Com_select: 查詢次數(shù)
- Com_update: 更新次數(shù)
通過上述指令,我們可以查看到當(dāng)前數(shù)據(jù)庫到底是以查詢?yōu)橹?,還是以增刪改為主,從而為數(shù)據(jù) 庫優(yōu)化提供參考依據(jù)。 如果是以增刪改為主,我們可以考慮不對(duì)其進(jìn)行索引的優(yōu)化。 如果是以 查詢?yōu)橹?,那么就要考慮對(duì)數(shù)據(jù)庫的索引進(jìn)行優(yōu)化了。
我們又該如何定位針對(duì)于那些查詢語句進(jìn)行優(yōu)化呢? 我們可以借助于慢查詢?nèi)罩尽?/p>
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩居涗浟怂袌?zhí)行時(shí)間超過指定參數(shù)(long_query_time,單位:秒,默認(rèn)10秒)的所有 SQL語句的日志。
MySQL的慢查詢?nèi)罩灸J(rèn)沒有開啟,我們可以查看一下系統(tǒng)變量 slow_query_log = off
可以通過在配置文件最后增加這兩個(gè)配置信進(jìn)行打開,并且查詢時(shí)長(zhǎng)不能超過2秒。
# 開啟MySQL慢日志查詢開關(guān) slow_query_log=1 # 設(shè)置慢日志的時(shí)間為2秒,SQL語句執(zhí)行時(shí)間超過2秒,就會(huì)視為慢查詢,記錄慢查詢?nèi)罩? long_query_time=2
配置完畢之后,通過以下指令重新啟動(dòng)MySQL服務(wù)器進(jìn)行測(cè)試,查看慢日志文件中記錄的信息
然后,再次查看開關(guān)情況,慢查詢?nèi)罩揪鸵呀?jīng)打開了。
測(cè)試
執(zhí)行如下Sql,一個(gè)查詢耗時(shí)0.00033秒,一個(gè)耗時(shí)13.35秒
我們之前打開過檢查慢查詢?nèi)罩尽?/p>
最終我們發(fā)現(xiàn),在慢查詢?nèi)罩局?,只?huì)記錄執(zhí)行時(shí)間超多我們預(yù)設(shè)時(shí)間(2s)的SQL,執(zhí)行較快的SQL 是不會(huì)記錄的
然后在實(shí)際開發(fā)中,我們也會(huì)出現(xiàn)這個(gè)問題,我們寫的SQL邏輯并不復(fù)雜卻執(zhí)行了1.9s,這個(gè)sql就不會(huì)被慢查詢?nèi)罩居涗洠俏覀円矐?yīng)該對(duì)其進(jìn)行優(yōu)化。
profile
- show profiles 能夠在做SQL優(yōu)化時(shí)幫助我們了解時(shí)間都耗費(fèi)到哪里去了。
- 通過have_profiling 參數(shù),能夠看到當(dāng)前MySQL是否支持profile操作:
設(shè)置打開。
SET profiling = 1
開關(guān)已經(jīng)打開了,接下來,我們所執(zhí)行的SQL語句,都會(huì)被MySQL記錄,并記錄執(zhí)行時(shí)間消耗到哪兒去 了。 我們直接執(zhí)行如下的SQL語句:
select * from tb_user; select * from tb_user where id = 1; select * from tb_user where name = '白起'; select count(*) from tb_sku;
查看每一條SQL的耗時(shí)情況:
到這里,我們就可以結(jié)合慢查詢?nèi)罩竞蚿rofile來輔助分析sql的具體執(zhí)行時(shí)間。
總結(jié)
- 慢sql查詢?nèi)罩拘薷呐渲梦募?,打開慢查詢?nèi)罩竞陀涗泂ql執(zhí)行的最長(zhǎng)時(shí)間。
- profile記錄每條sql的執(zhí)行時(shí)間,需要進(jìn)行設(shè)置set profiling = 1;
到此這篇關(guān)于MySQL執(zhí)行時(shí)間的查詢的文章就介紹到這了,更多相關(guān)MySQL時(shí)間的查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql通過ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟
mysql在使用的過程中,難免遇到數(shù)據(jù)庫表誤操作,下面這篇文章主要給大家介紹了關(guān)于Mysql通過ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06虛擬機(jī)linux端mysql數(shù)據(jù)庫無法遠(yuǎn)程訪問的解決辦法
最近在項(xiàng)目搭建過程中遇到一問題,有關(guān)虛擬機(jī)linux端mysql數(shù)據(jù)庫無法遠(yuǎn)程訪問,通過查閱相關(guān)數(shù)據(jù)庫資料問題解決,下面把具體的解決辦法分享給大家,有需要的朋友可以參考下2015-08-08mysql數(shù)據(jù)庫decimal類型與decimal長(zhǎng)度用法詳解
在MySQL中decimal是一種用于存儲(chǔ)精確數(shù)字的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫decimal類型與decimal長(zhǎng)度用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01Mysql數(shù)據(jù)庫報(bào)錯(cuò)2003?Can't?connect?to?MySQL?server?on?
最近在用mysql,打開mysql的圖形化界面要連接時(shí)出現(xiàn)2003錯(cuò)誤,所以下面這篇文章主要給大家介紹了關(guān)于Mysql數(shù)據(jù)庫報(bào)錯(cuò)2003?Can't?connect?to?MySQL?server?on?'localhost'?(10061)的解決方式,需要的朋友可以參考下2022-09-09Mysql| 使用通配符進(jìn)行模糊查詢?cè)斀?like,%,_)
這篇文章主要介紹了Mysql| 使用通配符進(jìn)行模糊查詢?cè)斀?like,%,_),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08