面试mysql慢查询_剑指Offer面试题:如何定位并优化慢查询sql
1.根據慢日志定位慢查詢sql
使用以下命令查看相關系統變量屬性:
show variables like '%query%';
主要看這三個屬性:
long_query_time : 10.000000:查詢超過10秒被定義為慢語句
slow_query_log : OFF:是否打開慢查詢日志
slow_query_log_file : /usr/local/mysql/data/slow.sql:慢查詢文件所在位置
使用以下命令設置這些屬性值:
set global slow_query_log = ON; # 打開慢查詢日志
set global long_query_time = 1; # 超過1秒的語句被定義為慢語句,注意設置了之后需要重新連接才有效
使用以下命令查詢慢查詢日志的數量:
show status like '%slow_queries%';
要查看慢日志,直接打開 slow.sql 文件查看即可:
sudo vim /usr/local/mysql/data/slow.sql
2.使用 explain 等工具分析sql
查詢出慢語句后可以通過 explain 工具分析sql:
explain select name from person_info_large order by name desc;
查詢結果:
balabala...
這里主要注意這幾個字段:
type: 表示mysql找到數據行的方式,性能從最優到最差排序如下,如果出現 index 或者 all 就需要注意優化了。
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
extra: extra中出現以下兩項意味著mysql不能使用索引,效率會受到重大影響,應當盡可能優化。
Using filesort:表示mysql會對結果使用一個外部索引排序,而不是從表里按索引次序讀到相關內容。可能在磁盤或是在內存上排序。Mysql中無法利用索引完成的排序操作稱為“文件排序”。
Using temporary:表示mysql在對查詢結果排序時使用了臨時表。常見于排序和分組查詢。
3.修改 sql 或者盡量讓 sql 走索引
這一步具體語句具體分析了,主要就是要么使用索引要么修改sql邏輯,還要注意是否語句會走錯索引,因為mysql查詢優化器會誤使用非預期索引導致語句查詢緩慢,這時候需要修改sql邏輯引導優化器使用正確的索引,或者強制(force index)使用我們預期的索引。
總結
以上是生活随笔為你收集整理的面试mysql慢查询_剑指Offer面试题:如何定位并优化慢查询sql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 父刷新子_父组件中vuex方法更
- 下一篇: java课程设计 成绩_Java课程设计