久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL?SQL性能分析之慢查詢日志、explain使用的方法是什么

143次閱讀
沒有評論

共計 2056 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇內容介紹了“MySQL SQL 性能分析之慢查詢日志、explain 使用的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

SQL 執行頻率

MySQL 客戶端連接成功后,通過 show [session|global] status 命令可以提供服務器狀態信息。通過如下指令,可以查看當前數據庫的 insert、update、delete、delect 的訪問頻次:

-- session  是查看當前會話;
-- global  是查詢全局數據; 
show global status like  Com_______

Com_delete:刪除次數

Com_insert:插入次數

Com_select:查詢次數

Com_update:更新次數

通過上述指令,可以查看到當前數據庫是以查詢為主,還是以增刪改為主,從而為數據庫優化提供參考依據。如果以增刪改為主,可以考慮不進行索引優化。如果以查詢為主,要考慮對數據庫的索引進行優化。

慢查詢日志

慢查詢日志記錄了所有執行時間超過指定參數(long_query_time,單位:秒,默認 10 秒)的所有 SQL 語句的日志。

MySQL 的慢查詢日志默認不開啟,可以查看系統變量 slow_query_log。

--  查看慢查詢日志是否開啟
show variables like  slow_query_log

如果要開啟慢查詢日志,需要在 MySQL 的配置文件 (/etc/my.cnf) 中配置如下信息:

#  開啟 MySQL 慢日志查詢開關
slow_query_log=1
#  設置慢日志的時間為 2 秒,SQL 語句執行時間超過 2 秒,就會視為慢查詢,記錄慢查詢日志
long_query_time=2

配置完畢之后,通過以下指令重新啟動 MySQL 服務器進行測試,查看慢日志文件中記錄的信息 /var/lib/mysql/localhost-slow.log。

例如:導入近 1000w 條數據。執行以下 SQL:

select count(*) from tb_sku;

可以看到,耗時近 90 秒

profile

show profiles 能夠在做 SQL 優化時了解時間都耗費到了哪里。

通過 have_profiling 參數,能夠看到當前 MySQL 是否支持 profile 操作:

select @@have_profiling ;

查看 profile 是否開啟:

select @@profiling;

通過 set 語句在 session/global 級別開啟 profiling:

set profiling = 1;

執行一些 SQL 語句,然后就會記錄 SQL 的耗時明細了。

--  查看每一條 SQL 的耗時基本情況
show profiles;
--  查看指定 query_id 的 SQL 語句各個階段的耗時情況
show profile for query [query_id];
--  查看指定 query_id 的 SQL 語句 CPU 的使用情況
show profile cpu for query [query_id];

explain

explain 或者 desc 命令獲取 MySQL 如何執行 select 語句的信息,包括在 select 語句執行過程中表如何連接和連接的順序。

--  直接在 select 語句之前加上關鍵字  explain / desc
explain select  字段列表  from  表名  where  條件;

字段描述 idselect 查詢的序列號,表示查詢中執行 select 子句或者是操作表的順序
id 相同,執行順序從上到下;id 不同,值越大,越先執行 select_type 表示 select 的類型,常見的取值(不止這么多):
SIMPLE:簡單表,即不使用表連接或者子查詢
PRIMARY:主查詢,即外層的查詢
UNION:UNION 中的第二個或者后面的查詢語句
SUBQUERY:SELECT/WHERE 之后包含了子查詢 type 表示連接類型,性能由好到差的連接類型為 NULL(不查詢表)、system(訪問系統表)、const(主鍵或唯一索引)、eq_ref、ref(非唯一索引)、range、index(用了索引,遍歷全部索引樹)、all(全表掃描)。possible_key 顯示可能應用在這張表上的索引,一個或多個。key 實際使用的索引,如果為 NULL,則沒有使用索引。key_len 表示索引中使用的字節數,該值為索引字段最大可能長度,并非實際使用長度,在不損失精確性的前提下,長度越短越好。rowsMySQL 認為必須要執行查詢的行數,在 innodb 引擎的表中,是一個估計值,可能并不總是準確的。filtered 表示返回結果的行數占需讀取行數的百分比,filtered 的值越大越好。

“MySQL SQL 性能分析之慢查詢日志、explain 使用的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2056字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 铜陵市| 高尔夫| 卓资县| 太和县| 嘉义市| 贵溪市| 筠连县| 鹤庆县| 额敏县| 镇远县| 东山县| 济源市| 分宜县| 交城县| 阿坝县| 万载县| 体育| 岳阳县| 专栏| 沁源县| 东兴市| 同仁县| 巴彦县| 贵溪市| 张家界市| 乌鲁木齐县| 图片| 凤山市| 新泰市| 吕梁市| 泰兴市| 商都县| 河西区| 景泰县| 高雄县| 海淀区| 鹿邑县| 宁海县| 贡觉县| 尉氏县| 白城市|