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

詳細(xì)聊聊MySQL中慢SQL優(yōu)化的方向

 更新時間:2021年08月29日 11:58:01   作者:Ijiran  
由于在MySQL日常查詢中,查詢類型的語句占慢sql的大部分,所以下面這篇文章主要給大家介紹了關(guān)于MySQL中慢SQL優(yōu)化方向的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

影響一個系統(tǒng)的運行速度的原因有很多,是多方面的,甚至可能是偶然性的,或前端,或后端,或數(shù)據(jù)庫,或中間件,或服務(wù)器,或網(wǎng)絡(luò)等等等等,真正的去定位一個問題需要對系統(tǒng)有一定的認(rèn)知,可以根據(jù)自身的判斷去縮小問題范圍。

今天不說其他的優(yōu)化,單獨把數(shù)據(jù)庫的優(yōu)化拿出來說幾個優(yōu)化方向。

跟系統(tǒng)的優(yōu)化方向一樣,數(shù)據(jù)庫的優(yōu)化,同樣也是多方面的,其中涵蓋著SQL語句的執(zhí)行情況,數(shù)據(jù)庫自身的情況等等,下面我們就來說一下MySQL數(shù)據(jù)庫中的慢SQL語句優(yōu)化方向,希望也能給到大家一些優(yōu)化思路。

SQL語句優(yōu)化

SQL語句的優(yōu)化,有很多文章說起,也有很多在SQL編寫上的指導(dǎo);但是那種只能支持基本開發(fā),如果要排查問題,那就不能單單的只是停留在SQL編寫上了,而是有一個整體的發(fā)現(xiàn)問題的流程。

本次優(yōu)化方向,大概分為發(fā)現(xiàn)慢查詢SQL,查看并解析SQL執(zhí)行計劃,SQL編寫上的優(yōu)化,索引優(yōu)化等幾個方面。

記錄慢查詢SQL

MySQL中記錄慢查詢SQL是可以利用MySQL內(nèi)部配置來實現(xiàn)的,這個配置就是slow_query_log配置。

可利用show variables like '%query%';查詢出以下三個相關(guān)結(jié)果。

long_query_time     | 1.00000
slow_query_log      | off
slow_query_log_file | /data/mysql/mysql_slow.log

解釋一下這三個參數(shù),

  • long_query_time:如何區(qū)分SQL查詢是慢查詢,就要規(guī)定一個查詢時間,超過這個時間的就歸類于慢查詢,此參數(shù)就是來設(shè)置時間范圍的;以秒為單位,可以設(shè)置小數(shù)。
  • slow_query_log:此參數(shù)為是否開啟記錄慢查詢SQL的開關(guān),兩個選擇,on或者off,默認(rèn)為off,所以在這里我們就知道如果要開啟慢查詢SQL記錄,需要手動設(shè)置開啟。
  • slow_query_log_file:慢查詢SQL日志的文件路徑,可以自行指定。

如何修改配置

有兩個方法。

其一:修改my.ini或者是my.cnf文件,將此三項配置進(jìn)行一個配置。

其二:直接在sqlplus中,使用set語法來修改參數(shù),但是重啟mysql數(shù)據(jù)庫后就會失效,sql如下:

set global long_query_time = 10;

set global slow_query_log = on;

set global slow_query_log_file = /data/mysql/mysql_slow.log;

因為這個方法會重啟失效,所以還是建議使用第一種方式。

查看慢查詢?nèi)罩?/h4>

如何查詢慢查詢?nèi)罩灸兀绻亢苄〉那闆r下,其實是不需要使用工具的,完全可以直接打開即可。

如果量比較大,就需要mysqldumpslow工具查詢會更方便。

mysqldumpslow是和mysqld相同類型的執(zhí)行腳本,可以直接在命令行中執(zhí)行,具體的使用方法如下:

mysqldumpslow參數(shù):

-s,是order的順序
-----al 平均鎖定時間
-----ar 平均返回記錄時間
-----at 平均查詢時間(默認(rèn))
-----c 計數(shù)
-----l 鎖定時間
-----r 返回記錄
-----t 查詢時間

-t,top,即為返回前面多少條的數(shù)據(jù)
-g,自定義正則表達(dá)式

舉個例子,如下:

mysqldumpslow -s r -t 5 /data/mysql/mysql_slow.log

查詢出返回記錄集最多的5個慢查詢SQL。

更多用法之后我建個測試庫單獨寫篇文章細(xì)說一下。

查看SQL執(zhí)行計劃

查看執(zhí)行計劃關(guān)鍵詞:EXPLAIN

如何使用

就是直接執(zhí)行 EXPLAIN SELECT * FROM TABLE_NAME;

這個一開始我是打算簡單說一下的,后來發(fā)現(xiàn)篇幅太長了,這個留待下篇文章里,感謝理解。

SQL編寫優(yōu)化

SQL的編寫優(yōu)化就很多了,我這里也整理出了一些,請大家自行查漏補(bǔ)缺。

  • 查詢語句無論是使用哪種判斷條件 等于、小于、大于, where左側(cè)的條件查詢字段不要使用函數(shù)或者表達(dá)式。
  • 不要直接使用select *,而應(yīng)該使用具體需要查詢的表字段;select * 使用的是全表掃描,不會走索引的。
  • 避免在 WHERE 字句中對字段進(jìn)行 NULL 判斷。
  • 避免在 WHERE 中使用 != 或 <> 操作符。
  • 使 用 BETWEEN AND 替代 IN。
  • 為常用搜索條件創(chuàng)建索引
  • 選擇正確的存儲引擎, InnoDB 、MyISAM 、MEMORY 等,不同的場景下使用不同的存儲引擎會有更好的效果。
  • 使用 like %123% 不會走索引, 而使用 like 123% 會走索引。非常重要?。。?/li>
  • 選擇合適的字段類型。
  • 設(shè)計字段時,要盡量使用NOT NULL。

為何要對慢SQL進(jìn)行治理

從數(shù)據(jù)庫角度看:每個SQL執(zhí)行都需要消耗一定I/O資源,SQL執(zhí)行的快慢,決定資源被占用時間的長短。假設(shè)總資源是100,有一條慢SQL占用了30的資源共計1分鐘。那么在這1分鐘時間內(nèi),其他SQL能夠分配的資源總量就是70,如此循環(huán),當(dāng)資源分配完的時候,所有新的SQL執(zhí)行將會排隊等待。

從應(yīng)用的角度看:SQL執(zhí)行時間長意味著等待,在OLTP應(yīng)用當(dāng)中,用戶的體驗較差

治理的優(yōu)先級上

  • master數(shù)據(jù)庫->slave數(shù)據(jù)庫
    • 目前數(shù)據(jù)庫基本上都是讀寫分離架構(gòu),讀在從庫(slave)上執(zhí)行,寫在主庫(master)上執(zhí)行。
    • 由于從庫的數(shù)據(jù)都是從主庫上復(fù)制過去的,主庫等待較多的,會加大與從庫的復(fù)制時延。
  • 執(zhí)行次數(shù)多的SQL優(yōu)先治理
  • 如果有一類SQL高并發(fā)集中訪問某一張表,應(yīng)當(dāng)優(yōu)先治理。

總結(jié)

這里面遠(yuǎn)遠(yuǎn)還沒有講全,還有很多種編寫規(guī)則,同時還有索引的建立并沒有聊,留給大家一些自己看書的時間,希望大家有所進(jìn)步。

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

相關(guān)文章

  • Mysql優(yōu)化方法詳細(xì)介紹

    Mysql優(yōu)化方法詳細(xì)介紹

    MySQL的優(yōu)化指的是一個很大的系統(tǒng),面試的時候我之前是從sql的語句優(yōu)化方面去說的,這種優(yōu)化也有作用,不過是從邏輯方面去優(yōu)化,下面這篇文章主要給大家介紹了關(guān)于MySQL查詢緩存優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • CentOS 7 安裝Percona Server+Mysql

    CentOS 7 安裝Percona Server+Mysql

    這篇文章主要介紹了CentOS 7 安裝Percona Server+Mysql的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • 解讀mysql中的null問題

    解讀mysql中的null問題

    這篇文章主要介紹了解讀mysql中的null問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MySQL中row_number的實現(xiàn)過程

    MySQL中row_number的實現(xiàn)過程

    這篇文章主要介紹了MySQL中row_number的實現(xiàn)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • MySQL中高效查詢JSON字符串字段的方法詳解

    MySQL中高效查詢JSON字符串字段的方法詳解

    在現(xiàn)代應(yīng)用開發(fā)中,JSON 格式因其靈活性和可讀性被廣泛用于存儲半結(jié)構(gòu)化數(shù)據(jù),本文主要和大家介紹了MySQL中高效查詢JSON字符串字段的相關(guān)方法,有需要的小伙伴可以了解下
    2026-01-01
  • MySQL數(shù)據(jù)庫的備份與還原操作方法

    MySQL數(shù)據(jù)庫的備份與還原操作方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的備份與還原操作方法,文章圍繞主題展開詳細(xì)的內(nèi)容加入,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • MySQL中空值Null和空字符‘‘的具體使用

    MySQL中空值Null和空字符‘‘的具體使用

    本文主要介紹了MySQL中空值Null和空字符''的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • MySQL如何用分隔符分隔字符串

    MySQL如何用分隔符分隔字符串

    這篇文章主要介紹了MySQL如何用分隔符分隔字符串,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL使用聚合函數(shù)進(jìn)行單表查詢

    MySQL使用聚合函數(shù)進(jìn)行單表查詢

    這篇文章主要介紹了MySQL使用聚合函數(shù)進(jìn)行單表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql too many open connections問題解決方法

    mysql too many open connections問題解決方法

    這篇文章主要介紹了mysql too many open connections問題解決方法,其實是max_connections配置問題導(dǎo)致,它必須在[mysqld]下面才會生效,需要的朋友可以參考下
    2014-05-05

最新評論

岱山县| 前郭尔| 滨州市| 庐江县| 周至县| 连云港市| 康保县| 巫山县| 东安县| 诸暨市| 延安市| 星子县| 安宁市| 安徽省| 拉孜县| 休宁县| 延津县| 定襄县| 东海县| 将乐县| 阳谷县| 山东省| 卢湾区| 五原县| 山东| 高尔夫| 仙桃市| 胶州市| 江都市| 开阳县| 册亨县| 长汀县| 普定县| 岳阳县| 曲沃县| 台江县| 洮南市| 古浪县| 肥东县| 龙海市| 绍兴市|