亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中慢SQL優化的示例分析

發布時間:2021-08-30 09:10:36 來源:億速云 閱讀:150 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關MySQL中慢SQL優化的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    SQL語句優化

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

    本次優化方向,大概分為發現慢查詢SQL,查看并解析SQL執行計劃,SQL編寫上的優化,索引優化等幾個方面。

    記錄慢查詢SQL

    MySQL中記錄慢查詢SQL是可以利用MySQL內部配置來實現的,這個配置就是slow_query_log配置。

    可利用show variables like '%query%';查詢出以下三個相關結果。

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

    解釋一下這三個參數,

    • long_query_time:如何區分SQL查詢是慢查詢,就要規定一個查詢時間,超過這個時間的就歸類于慢查詢,此參數就是來設置時間范圍的;以秒為單位,可以設置小數。

    • slow_query_log:此參數為是否開啟記錄慢查詢SQL的開關,兩個選擇,on或者off,默認為off,所以在這里我們就知道如果要開啟慢查詢SQL記錄,需要手動設置開啟。

    • slow_query_log_file:慢查詢SQL日志的文件路徑,可以自行指定。

    如何修改配置

    有兩個方法。

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

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

    set global long_query_time = 10;
    
    set global slow_query_log = on;
    
    set global slow_query_log_file = /data/mysql/mysql_slow.log;

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

    查看慢查詢日志

    如何查詢慢查詢日志呢,如果量很小的情況下,其實是不需要使用工具的,完全可以直接打開即可。

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

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

    mysqldumpslow參數:

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

    -t,top,即為返回前面多少條的數據
    -g,自定義正則表達式

    舉個例子,如下:

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

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

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

    查看SQL執行計劃

    查看執行計劃關鍵詞:EXPLAIN

    如何使用

    就是直接執行 EXPLAIN SELECT * FROM TABLE_NAME;

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

    SQL編寫優化

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

    • 查詢語句無論是使用哪種判斷條件 等于、小于、大于, where左側的條件查詢字段不要使用函數或者表達式。

    • 不要直接使用select *,而應該使用具體需要查詢的表字段;select * 使用的是全表掃描,不會走索引的。

    • 避免在 WHERE 字句中對字段進行 NULL 判斷。

    • 避免在 WHERE 中使用 != 或 <> 操作符。

    • 使 用 BETWEEN AND 替代 IN。

    • 為常用搜索條件創建索引

    • 選擇正確的存儲引擎, InnoDB 、MyISAM 、MEMORY 等,不同的場景下使用不同的存儲引擎會有更好的效果。

    • 使用 like %123% 不會走索引, 而使用 like 123% 會走索引。非常重要!!!

    • 選擇合適的字段類型。

    • 設計字段時,要盡量使用NOT NULL。

    為何要對慢SQL進行治理

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

    從應用的角度看:SQL執行時間長意味著等待,在OLTP應用當中,用戶的體驗較差

    治理的優先級上

    • master數據庫->slave數據庫

      • 目前數據庫基本上都是讀寫分離架構,讀在從庫(slave)上執行,寫在主庫(master)上執行。

      • 由于從庫的數據都是從主庫上復制過去的,主庫等待較多的,會加大與從庫的復制時延。

    • 執行次數多的SQL優先治理

    • 如果有一類SQL高并發集中訪問某一張表,應當優先治理。

    感謝各位的閱讀!關于“MySQL中慢SQL優化的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    中西区| 鞍山市| 忻州市| 稻城县| 菏泽市| 石林| 台前县| 临泉县| 延安市| 连云港市| 达州市| 盐池县| 西乌珠穆沁旗| 西林县| 玉溪市| 棋牌| 正蓝旗| 永修县| 社旗县| 蒙山县| 鹤庆县| 礼泉县| 甘谷县| 双柏县| 湘潭县| 海阳市| 喜德县| 花垣县| 无锡市| 锡林郭勒盟| 朔州市| 沧源| 湖北省| 吉林市| 洞口县| 吉林省| 玉林市| 庄浪县| 休宁县| 安化县| 洛扎县|