最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL定位并優(yōu)化慢查詢sql的詳細(xì)實(shí)例

 更新時(shí)間:2021年12月24日 12:50:18   作者:X凱  
mysql記錄下查詢超過指定時(shí)間的語句,被稱為慢查詢,下面這篇文章主要給大家介紹了關(guān)于MySQL定位并優(yōu)化慢查詢sql的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下

1.如何定位并優(yōu)化慢查詢sql   

a.根據(jù)慢日志定位慢查詢sql

SHOW VARIABLES LIKE '%query%' 查詢慢日志相關(guān)信息

 

slow_query_log 默認(rèn)是off關(guān)閉的,使用時(shí),需要改為on 打開      

slow_query_log_file 記錄的是慢日志的記錄文件

long_query_time 默認(rèn)是10S,每次執(zhí)行的sql達(dá)到這個(gè)時(shí)長(zhǎng),就會(huì)被記錄     

SHOW STATUS LIKE '%slow_queries%' 查看慢查詢狀態(tài)

Slow_queries 記錄的是慢查詢數(shù)量 當(dāng)有一條sql執(zhí)行一次比較慢時(shí),這個(gè)vlue就是1 (記錄的是本次會(huì)話的慢sql條數(shù))

注意:

如何打開慢查詢 : SET GLOBAL slow_query_log = ON;

將默認(rèn)時(shí)間改為1S: SET GLOBAL long_query_time = 1;

(設(shè)置完需要重新連接數(shù)據(jù)庫(kù),PS:僅在這里改的話,當(dāng)再次重啟數(shù)據(jù)庫(kù)服務(wù)時(shí),所有設(shè)置又會(huì)自動(dòng)恢復(fù)成默認(rèn)值,永久改變需去my.ini中改)

b.使用explain等工具分析sql

在要執(zhí)行的sql前加上explain 例如:EXPLAIN SELECT menu_name FROM t_sys_menu ORDER BY menu_id DESC;

接著看explain的關(guān)鍵字段

type:

如果發(fā)現(xiàn)type的值是最后兩個(gè)中的其中一個(gè)時(shí),證明語句需要優(yōu)化了。

extra:

c.修改sql或者盡量讓sql走索引

mysql查詢優(yōu)化器會(huì)根據(jù)具體情況自己判斷走哪個(gè)索引,不一定是走主鍵(explain中的key可以看到走的哪個(gè)key)具體情況根據(jù)具體情況來定,當(dāng)你要強(qiáng)制執(zhí)行走某一個(gè)key時(shí):

在查詢的最后加上 force index(primary); 強(qiáng)制走主鍵的

2.聯(lián)合索引的最左匹配原則的成因

簡(jiǎn)單說下什么是最左匹配原則

顧名思義:最左優(yōu)先,以最左邊的為起點(diǎn)任何連續(xù)的索引都能匹配上。同時(shí)遇到范圍查詢(>、<、between、like)就會(huì)停止匹配。

例如:b = 2 如果建立(a,b)順序的索引,是匹配不到(a,b)索引的;但是如果查詢條件是a = 1 and b = 2或者a=1(又或者是b = 2 and b = 1)就可以,因?yàn)閮?yōu)化器會(huì)自動(dòng)調(diào)整a,b的順序。再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,因?yàn)閏字段是一個(gè)范圍查詢,它之后的字段會(huì)停止匹配。

最左匹配原則的原理

最左匹配原則都是針對(duì)聯(lián)合索引來說的,所以我們有必要了解一下聯(lián)合索引的原理。了解了聯(lián)合索引,那么為什么會(huì)有最左匹配原則這種說法也就理解了。

我們都知道索引的底層是一顆B+樹,那么聯(lián)合索引當(dāng)然還是一顆B+樹,只不過聯(lián)合索引的健值數(shù)量不是一個(gè),而是多個(gè)。構(gòu)建一顆B+樹只能根據(jù)一個(gè)值來構(gòu)建,因此數(shù)據(jù)庫(kù)依據(jù)聯(lián)合索引最左的字段來構(gòu)建B+樹。

例子:假如創(chuàng)建一個(gè)(a,b)的聯(lián)合索引,那么它的索引樹是這樣的

可以看到a的值是有順序的,1,1,2,2,3,3,而b的值是沒有順序的1,2,1,4,1,2。所以b = 2這種查詢條件沒有辦法利用索引,因?yàn)槁?lián)合索引首先是按a排序的,b是無序的。

同時(shí)我們還可以發(fā)現(xiàn)在a值相等的情況下,b值又是按順序排列的,但是這種順序是相對(duì)的。所以最左匹配原則遇上范圍查詢就會(huì)停止,剩下的字段都無法使用索引。例如a = 1 and b = 2 a,b字段都可以使用索引,因?yàn)樵赼值確定的情況下b是相對(duì)有序的,而a>1and b=2,a字段可以匹配上索引,但b值不可以,因?yàn)閍的值是一個(gè)范圍,在這個(gè)范圍中b是無序的。

成因:

當(dāng)通過(col3,col2)這樣的聯(lián)合索引去查找時(shí),可以看到也是一個(gè)B+樹的結(jié)構(gòu)向下查找,若直接通過col2去查找,無法直接查找到34、77。也就用不到這個(gè)聯(lián)合索引了。

3.索引是建立得越多越好嗎

1.數(shù)據(jù)量小的表不需要建立索引,建立會(huì)增加額外的索引開銷。

2.數(shù)據(jù)變更需要維護(hù)索引,因此更多的索引意味著更多的維護(hù)成本。

3.更多的索引意味著也需要更多的空間。

總結(jié)

到此這篇關(guān)于MySQL定位并優(yōu)化慢查詢sql的文章就介紹到這了,更多相關(guān)MySQL定位優(yōu)化慢查詢sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL數(shù)據(jù)去重的3種方法實(shí)例詳解

    SQL數(shù)據(jù)去重的3種方法實(shí)例詳解

    SQL去重是數(shù)據(jù)分析工作中比較常見的一個(gè)場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于SQL數(shù)據(jù)去重的3種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • MySQL 索引的一些細(xì)節(jié)分享

    MySQL 索引的一些細(xì)節(jié)分享

    這篇文章主要介紹了MySQL 索引的一些細(xì)節(jié)分享,幫助大家更好的理解和使用MySQL中的索引,感興趣的朋友可以了解下
    2020-12-12
  • mysql全文模糊搜索MATCH AGAINST方法示例

    mysql全文模糊搜索MATCH AGAINST方法示例

    這篇文章主要介紹了mysql全文模糊搜索MATCH AGAINST方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • KubeSphere部署mysql的詳細(xì)步驟

    KubeSphere部署mysql的詳細(xì)步驟

    本文介紹了在KubeSphere中部署Mysql的詳細(xì)步驟,包括創(chuàng)建mysql配置、pvc掛載、工作負(fù)載、服務(wù),并測(cè)試數(shù)據(jù)庫(kù)連接,步驟詳盡,包括yaml配置和環(huán)境變量設(shè)置,特別強(qiáng)調(diào)了路徑一致性和外部訪問設(shè)置,還提到了使用NodePort模式解決自定義域名連接問題
    2024-10-10
  • mysql 5.5.27 winx64安裝配置方法圖文教程

    mysql 5.5.27 winx64安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql5.5.27 winx64安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 淺談如何保證Mysql主從一致

    淺談如何保證Mysql主從一致

    這篇文章主要介紹了淺談如何保證Mysql主從一致
    2022-03-03
  • MySql如何獲取相鄰數(shù)據(jù)

    MySql如何獲取相鄰數(shù)據(jù)

    這篇文章主要介紹了MySql如何獲取相鄰數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MySQL數(shù)據(jù)表合并去重的簡(jiǎn)單實(shí)現(xiàn)方法

    MySQL數(shù)據(jù)表合并去重的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)表合并去重的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySQL查看版本的五種方法總結(jié)

    MySQL查看版本的五種方法總結(jié)

    在日常項(xiàng)目開發(fā)過程中,我們經(jīng)常要連接自己的數(shù)據(jù)庫(kù),此時(shí)不知道數(shù)據(jù)庫(kù)的版本是萬萬不可的,下面這篇文章主要給大家介紹了關(guān)于MySQL查看版本的五種方法,需要的朋友可以參考下
    2023-02-02
  • MySQL入門(二) 數(shù)據(jù)庫(kù)數(shù)據(jù)類型詳解

    MySQL入門(二) 數(shù)據(jù)庫(kù)數(shù)據(jù)類型詳解

    這個(gè)數(shù)據(jù)庫(kù)所遇到的數(shù)據(jù)類型今天統(tǒng)統(tǒng)在這里講清楚了,以后在看到什么數(shù)據(jù)類型,咱度應(yīng)該認(rèn)識(shí),對(duì)我來說,最不熟悉的應(yīng)該就是時(shí)間類型這塊了。但是通過今天的學(xué)習(xí),已經(jīng)解惑了。下面就跟著我的節(jié)奏去把這個(gè)拿下吧
    2018-07-07

最新評(píng)論

方城县| 湖南省| 贡觉县| 安泽县| 菏泽市| 临洮县| 闵行区| 吴忠市| 蒙城县| 锦州市| 景洪市| 淮北市| 英山县| 遵义县| 富川| 土默特左旗| 蒲城县| 塔河县| 瑞丽市| 涟水县| 都昌县| 罗城| 乌海市| 鸡泽县| 保德县| 玉门市| 田林县| 凤阳县| 牙克石市| 武胜县| 林周县| 泊头市| 仪陇县| 武鸣县| 潞城市| 云浮市| 民丰县| 如东县| 北安市| 海原县| 银川市|