laravel-soar - 在 Laravel 中轻松容易的优化 sql 语句的扩展包

laravel-soar - 在 Laravel 应用程序中轻松容易的优化 sql 语句的扩展包。

score.png

功能

  • 支持基于启发式算法的语句优化
  • 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
  • 支持 EXPLAIN 信息丰富解读
  • 支持 SQL 指纹、压缩和美化
  • 支持 Eloquent 查询构建器方法生成 SQL 优化报告

源码链接

相关项目

环境要求

  • laravel >= 5.5

安装

$ composer require guanguans/laravel-soar:^1.1 --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
本帖由系统于 2年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 46

@jxlwqq 感谢肯定 :stuck_out_tongue_winking_eye:

2年前 评论

优秀,一直在找sql分析的工具,没想到有了laravel扩展包,Mark了 :+1:

2年前 评论

@Darius_zh :smiley: 觉得不错的话,可以尝试用一下。

2年前 评论

@caijunduo 谢谢老哥 Mark,可以尝试用一下。

2年前 评论

@bhlsunshine 可以尝试用一下 :stuck_out_tongue_winking_eye:

2年前 评论

支持一下,回头玩玩这个扩展

2年前 评论
guanguans (楼主) 2年前

mark一下

2年前 评论
guanguans (楼主) 2年前

mark

2年前 评论
guanguans (楼主) 2年前

{"msg":"Call to undefined method Illuminate\Database\Query\Builder::ddSoarHtmlExplain()"}

2年前 评论
川夏 (作者) 2年前
川夏 (作者) 2年前

@川夏 查询构建器调用是 1.1 版本以后的功能,可以升级到 1.1 版本,执行一下操作即可:

composer remove guanguans/laravel-soar -vvv
composer require guanguans/laravel-soar:^1.1 --dev -vvv
2年前 评论
川夏 2年前
guanguans (作者) (楼主) 2年前
川夏 2年前

@川夏 找到原因了,是因为老版本 laravel 延时加载服务的问题,我已经发布了一个修复版本,可重新安装最新版本:

composer remove guanguans/laravel-soar -vvv
composer require guanguans/laravel-soar:^1.1.1 --dev -vvv

另外可否告知一下你 laravel 版本号。

2年前 评论
川夏 2年前
川夏 2年前

Return value of Guanguans\SoarPHP\Soar::explain() must be of the type string, null returned 报这个错,有遇到过没,laravel5.7 $sql = \App\Model\Goods::query()->where('id', '>=','1')->toRawSql(); \Soar::mdExplain($sql);

2年前 评论
guanguans (楼主) 2年前
zexploit (作者) 2年前
TommyTu 2年前

优秀,收藏

2年前 评论
guanguans (楼主) 2年前
随波逐流

mark

2年前 评论
guanguans (楼主) 2年前

牛啊 老哥

2年前 评论
guanguans (楼主) 2年前
黑将军

牛逼,一键三连

2年前 评论
guanguans (楼主) 2年前
黑将军 (作者) 2年前
czy2020

Return value of Guanguans\SoarPHP\Soar::score() must be of the type string, null returned
环境 :mysql 5.7.3 php7.3.4 laravel 6.2 laravel-soar 1.1

2年前 评论
guanguans (楼主) 2年前

牛批,三连

2年前 评论
guanguans (楼主) 2年前

mark

2年前 评论
guanguans (楼主) 2年前
TommyTu

Mac 如果报 fatal error: runtime: bsdthread_register error,去小米soar源码安装一下,替换掉soar-php/bin/soar.darwin-amd64即可

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
56
粉丝
126
喜欢
971
收藏
1333
排名:46
访问:15.3 万
私信
所有博文
社区赞助商