laravel-soar - 在 Laravel 中輕鬆容易的優化 sql 語句的擴充套件包

guanguans發表於2021-06-15

laravel-soar - 在 Laravel 應用程式中輕鬆容易的優化 sql 語句的擴充套件包。

score.png

功能

  • 支援基於啟發式演算法的語句優化
  • 支援複雜查詢的多列索引優化(UPDATE, INSERT, DELETE, SELECT)
  • 支援 EXPLAIN 資訊豐富解讀
  • 支援 SQL 指紋、壓縮和美化
  • 支援 Eloquent 查詢構建器方法生成 SQL 優化報告

原始碼連結

相關專案

環境要求

  • laravel >= 5.5

安裝

$ composer require guanguans/laravel-soar --dev -vvv

釋出服務

$ php artisan vendor:publish --provider="Guanguans\\LaravelSoar\\SoarServiceProvider"

使用

門面使用示例

$sql = Member::query()->select(['id',  'nickname'])->where('id',  100)->toRawSql();

\Soar::score($sql);        // 生成 sql 評分報告
\Soar::mdExplain($sql);    // 生成 markdown 格式的 explain 資訊解讀報告
\Soar::htmlExplain($sql);  // 生成 html 格式的 Explain 資訊解讀報告
\Soar::syntaxCheck($sql);  // sql 語法檢查
\Soar::fingerPrint($sql);  // 生成 sql 指紋
\Soar::pretty($sql);       // 美化 sql
\Soar::md2html($sql);      // 將 markdown 格式內容轉化為 html 格式內容
\Soar::help($sql);         // 輸出 soar 幫助命令內容
\Soar::exec($command);     // 執行任意 soar 命令

生成 sql 評分報告示例

use App\Models\Member;

Member::query()
    ->select([
        'id',
        'nickname',
    ])
    ->where('id', 100)
    // ->toSoarScore()   // 生成 sql 評分報告
    // ->dumpSoarScore() // 列印 sql 評分報告
    ->ddSoarScore()      // 列印 sql 評分報告,並且退出應用程式。
;

high-score.png

// 查詢構建器使用示例
DB::table('yb_member')
    ->select('*')
    ->join('yb_member_account as yb_member_account', 'yb_member_account.member_id', '=', 'yb_member.id')
    ->whereRaw('1 <> 1')
    ->where('yb_member.nickname', 'like', 'admin')
    ->where('yb_member.username', 'like', '%admin%')
    ->whereRaw("substring(yb_member.username, 1, 5) = 'admin'")
    ->whereIn('yb_member.id', [110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120])
    ->orWhereNotNull('yb_member.realname')
    ->groupByRaw("yb_member.status, '100'")
    ->having('yb_member.id', '>', '100')
    ->inRandomOrder()
    // ->toSoarScore()   // 生成 sql 評分報告
    // ->dumpSoarScore() // 列印 sql 評分報告
    ->ddSoarScore()      // 列印 sql 評分報告,並且退出應用程式。
;

low-score.png

生成 explain 資訊解讀報告示例

// 查詢構建器使用示例
DB::table('yb_member')
    ->select('*')
    ->join('yb_member_account as yb_member_account', 'yb_member_account.member_id', '=', 'yb_member.id')
    ->whereRaw('1 <> 1')
    ->where('yb_member.nickname', 'like', 'admin')
    ->where('yb_member.username', 'like', '%admin%')
    ->whereRaw("substring(yb_member.username, 1, 5) = 'admin'")
    ->whereIn('yb_member.id', [110, 120])
    ->orWhereNotNull('yb_member.realname')
    ->groupByRaw("yb_member.status, '100'")
    ->having('yb_member.id', '>', '100')
    ->inRandomOrder()
    // ->toSoarHtmlExplain()   // 生成 explain 資訊解讀報告
    // ->dumpSoarHtmlExplain() // 列印 explain 資訊解讀報告
    ->ddSoarHtmlExplain()      // 列印 explain 資訊解讀報告,並且退出應用程式。
;

explain.png

美化 sql 語句

// 查詢構建器使用示例
DB::table('yb_member')
    ->select('*')
    ->join('yb_member_account as yb_member_account', 'yb_member_account.member_id', '=', 'yb_member.id')
    ->whereRaw('1 <> 1')
    ->where('yb_member.nickname', 'like', 'admin')
    ->where('yb_member.username', 'like', '%admin%')
    ->whereRaw("substring(yb_member.username, 1, 5) = 'admin'")
    ->whereIn('yb_member.id', [110, 120])
    ->orWhereNotNull('yb_member.realname')
    ->groupByRaw("yb_member.status, '100'")
    ->having('yb_member.id', '>', '100')
    ->inRandomOrder()
    // ->toSoarPretty()   // 生成美化後的 sql
    // ->dumpSoarPretty() // 列印美化後的 sql
    ->dumpSoarPretty()    // 列印美化後的 sql,並且退出應用程式。
;

pretty.png

本作品採用《CC 協議》,轉載必須註明作者和本文連結
No practice, no gain in one's wit. 我的 Gitub

相關文章