laravel列印輸出完整sql,執行時間和explain分析

oliver-l發表於2020-11-02

自己參考了Laravel 資料庫:輸出 SQL 語句寫了一個方法方便自己分析執行的sql語句

function toRawSql($getQueryLog)
{
    $sqlArr = [];
    foreach ($getQueryLog as $k=>$log){
        $sql = $log['query'];
        foreach ($log['bindings'] as $binding){
            $binding = is_numeric($binding) ? $binding : "'".$binding."'";
            //正則匹配替換
            $sql = preg_replace('/\?/',$binding,$sql,1);
        }
        //輸出sql語句
        $sqlArr[$k]['sql'] = $sql;
        //執行時間
        $sqlArr[$k]['time'] = $log['time'];
        //使用explain分析sql語句
        $sqlArr[$k]['explain'] = \DB::select('explain '.$log['query'],$log['bindings']);
    }
    return $sqlArr;
}

使用,我這邊是把方法註冊為全域性函式

DB::connection()->enableQueryLog();
//
//執行程式碼
dd(toRawSql(DB::getQueryLog()));

輸出如下,可以比較方便的檢視完整sql語句和explain分析sql語句,通過分析explain再對sql語句進行相應的語句優化,是否新增索引

explain分析可檢視一張圖徹底搞定 explain

laravel列印輸出完整sql,執行時間和explain分析

如果有問題,請指出

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章