前言
本文主要給大家分享了關于sql語句優化的一般步驟,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
一、通過 show status 命令了解各種 sql 的執行頻率
mysql 客戶端連接成功后,通過 show [session|global] status 命令可以提供服務器狀態信息,也可以在操作系統上使用 mysqladmin extend-status 命令獲取這些消息。
show status 命令中間可以加入選項 session(默認) 或 global:
| # Com_xxx 表示每個 xxx 語句執行的次數。mysql> show status like 'Com_%'; |
我們通常比較關心的是以下幾個統計參數:
Com_select : 執行 select 操作的次數,一次查詢只累加 1。 Com_insert : 執行 insert 操作的次數,對于批量插入的 insert 操作,只累加一次。 Com_update : 執行 update 操作的次數。 Com_delete : 執行 delete 操作的次數。上面這些參數對于所有存儲引擎的表操作都會進行累計。下面這幾個參數只是針對 innodb 的,累加的算法也略有不同:
Innodb_rows_read : select 查詢返回的行數。 Innodb_rows_inserted : 執行 insert 操作插入的行數。 Innodb_rows_updated : 執行 update 操作更新的行數。 Innodb_rows_deleted : 執行 delete 操作刪除的行數。通過以上幾個參數,可以很容易地了解當前數據庫的應用是以插入更新為主還是以查詢操作為主,以及各種類型的 sql 大致的執行比例是多少。對于更新操作的計數,是對執行次數的計數,不論提交還是回滾都會進行累加。
對于事務型的應用,通過 Com_commit 和 Com_rollback 可以了解事務提交和回滾的情況,對于回滾操作非常頻繁的數據庫,可能意味著應用編寫存在問題。
此外,以下幾個參數便于用戶了解數據庫的基本情況:
Connections : 試圖連接 mysql 服務器的次數。 Uptime : 服務器工作時間。 Slow_queries : 慢查詢次數。二、定義執行效率較低的 sql 語句
1. 通過慢查詢日志定位那些執行效率較低的 sql 語句,用 --log-slow-queries[=file_name] 選項啟動時,mysqld 寫一個包含所有執行時間超過 long_query_time 秒的 sql 語句的日志文件。
2. 慢查詢日志在查詢結束以后才記錄,所以在應用反映執行效率出現問題的時候慢查詢日志并不能定位問題,可以使用 show processlist 命令查看當前 mysql 在進行的線程,包括線程的狀態、是否鎖表等,可以實時的查看 sql 的執行情況,同時對一些鎖表操作進行優化。
三、通過 explain 分析低效 sql 的執行計劃
測試數據庫地址:https://downloads.mysql.com/docs/sakila-db.zip(本地下載)
新聞熱點
疑難解答