首先在開發(fā)過程中也需要開啟數(shù)據(jù)庫Mysql的慢查詢 SET GLOBAL slow_query_log='on'; 其次設(shè)置慢SQL的最小時(shí)間 注意:這里時(shí)間單位是s秒但是有6位小數(shù)因此可以表示到微妙的時(shí)間力度,一般單表SQL執(zhí)行時(shí)間在20ms之內(nèi)為宜,反之理解就是在開發(fā)過程中,如果你執(zhí)行的sql語句超過了20ms則你需要去關(guān)注它。 SET GLOBAL long_query_time=0.02; 為方便操作可以把慢SQL記錄到表中而不是文件中 SET GLOBAL log_output='TABLE'; 最后通過mysql.slow_log表就可以查詢到記錄的慢SQL
首先開啟數(shù)據(jù)庫Mysql的慢查詢 SET GLOBAL slow_query_log='on'; 其次設(shè)置慢SQL的最小時(shí)間 SET GLOBAL long_query_time=0.02; 一般生成時(shí)把慢SQL放到文件 SET GLOBAL log_output='FILE'; 下載慢SQL日志文件到本地 最后關(guān)閉數(shù)據(jù)庫Mysql的慢查詢 著重注意:生產(chǎn)的慢SQL最好在使用時(shí),才去開啟,用完后關(guān)閉,避免日志記錄影響到業(yè)務(wù)性能 SET GLOBAL slow_query_log='off'; SQL怎么調(diào)優(yōu)? SQL調(diào)優(yōu)融合多方面的知識(shí),總體來說常見從表結(jié)構(gòu)、表索引、兩方面來優(yōu)化。
Mysql內(nèi)部存在一種特殊且輕量級(jí)的臨時(shí)表,它是被Mysql自動(dòng)創(chuàng)建和刪除的。主要在SQL的執(zhí)行過程中使用臨時(shí)表來存儲(chǔ)某些操作的中間結(jié)果,該過程由 MySQL 自動(dòng)完成,用戶無法手工干預(yù),且這種內(nèi)部表對(duì)用戶來說是不可見的。
多表關(guān)聯(lián)查詢(JOIN)中,order by 或group by使用的列不是第一個(gè)表的列 group by 的列不是索引列時(shí) distinct和group by 聯(lián)合使用 order by 語句中使用了distinct關(guān)鍵字 group by 的列時(shí)索引列,但數(shù)據(jù)量過大時(shí) 2.2、如何查看是否使用內(nèi)部臨時(shí)表?