天天看點

sql查詢目前月份_優化SQL 經典案例!!!(上)

hell,大家早上好、中午好、晚上好、歡迎收看本次文章,我是聲音甜美的雞排妹。今天是周日,我今天去了廣州圖書館這邊寫文章。分享一下雞排妹在工作中遇到SQL優化的經驗。

sql查詢目前月份_優化SQL 經典案例!!!(上)

在應用的的開發過程中,由于初期資料量小,開發人員寫 SQL 語句時更重視功能上的實作,但是當應用系統正式 上線後,随着生産資料量的急劇增長,很多 SQL 語句開始逐漸顯露出性能問題,對生産的影響也越來越大,此時 這些有問題的 SQL 語句就成為整個系統性能的瓶頸,是以我們必須要對它們進行優化,本章将詳細介紹在 MySQL 中優化 SQL 語句的方法。當面對一個有 SQL 性能問題的資料庫時,我們應該從何處入手來進行系統的分析,使得能夠盡快定位問題 SQL 并 盡快解決問題。

3.1 檢視SQL執行頻率

MySQL 用戶端連接配接成功後,通過 show [session|global] status 指令可以提供伺服器狀态資訊。show [session|global] status 可以根據需要加上參數“session”或者“global”來顯示 session 級(目前連接配接)的計結果和 global 級(自資料庫上次啟動至今)的統計結果。如果不寫,預設使用參數是“session”。

下面的指令顯示了目前 session 中所有統計參數的值:

show status like 'Com_______';

sql查詢目前月份_優化SQL 經典案例!!!(上)

show status like 'Innodb_rows_%';

sql查詢目前月份_優化SQL 經典案例!!!(上)

Com_xxx 表示每個 xxx 語句執行的次數,我們通常比較關心的是以下幾個統計參數。

sql查詢目前月份_優化SQL 經典案例!!!(上)

show status like 'Com_______';

show status like 'Innodb_rows_%';

Com_*** : 這些參數對于所有存儲引擎的表操作都會進行累計。

Innodb_*** : 這幾個參數隻是針對InnoDB 存儲引擎的,累加的算法也略有不同。

3.2 定位低效率執行SQL

  • 慢查詢日志 : 通過慢查詢日志定位那些執行效率較低的 SQL 語句,用--log-slow-queries[=file_name]選項啟 動時,mysqld 寫一個包含所有執行時間超過 long_query_time 秒的 SQL 語句的日志檔案。具體可以檢視本 書第 26 章中日志管理的相關部分。
  • show processlist : 慢查詢日志在查詢結束以後才紀錄,是以在應用反映執行效率出現問題的時候查詢慢查詢 日志并不能定位問題,可以使用show processlist指令檢視目前MySQL在進行的線程,包括線程的狀态、是否 鎖表等,可以實時地檢視 SQL 的執行情況,同時對一些鎖表操作進行優化。
sql查詢目前月份_優化SQL 經典案例!!!(上)
  1. id列,使用者登入mysql時,系統配置設定的"connection_id",可以使用函數connection_id()檢視
  2. user列,顯示目前使用者。如果不是root,這個指令就隻顯示使用者權限範圍的sql語句
  3. host列,顯示這個語句是從哪個ip的哪個端口上發的,可以用來跟蹤出現問題語句的使用者
  4. db列,顯示這個程序目前連接配接的是哪個資料庫
  5. command列,顯示目前連接配接的執行的指令,一般取值為休眠(sleep),查詢(query),連(connect)等
  6. time列,顯示這個狀态持續的時間,機關是秒
  7. state列,顯示使用目前連接配接的sql語句的狀态,很重要的列。state描述的是語句執行中的某一個狀态。一 個sql語句,以查詢為例,可能需要經過copying to tmp table、sorting result、sending data等狀态 才可以完成
  8. info列,顯示這個sql語句,是判斷問題語句的一個重要依據

3.3 explain分析執行計劃

通過以上步驟查詢到效率低低SQL語句後,可以通過EXPLANIN或者DESC指令擷取MySQL指令擷取MySQl如果執行SELECT語句的資訊,包括在SELECT 語句執行過程中如何連接配接和連接配接順序。

explain select * from tb_item where id = 536563;

sql查詢目前月份_優化SQL 經典案例!!!(上)

explain select * from tb_item where title ='new2 - 阿爾卡特 (OT-927) 炭黑 聯通3G手機 雙卡雙待';

sql查詢目前月份_優化SQL 經典案例!!!(上)