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
本帖由系统于 1年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 46

@jxlwqq 感谢肯定 :stuck_out_tongue_winking_eye:

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

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

mark一下

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

mark

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

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

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

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

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

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

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

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

1年前 评论
川夏 1年前
川夏 1年前

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);

1年前 评论
guanguans (楼主) 1年前
zexploit (作者) 1年前
TommyTu 10个月前

优秀,收藏

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

mark

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

牛啊 老哥

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

牛逼,一键三连

1年前 评论
guanguans (楼主) 1年前
黑将军 (作者) 1年前
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

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

牛批,三连

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

mark

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

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

6个月前 评论

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