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