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
本帖由系统于 3个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 24

@jxlwqq 感谢肯定 :stuck_out_tongue_winking_eye:

3个月前 评论

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

3个月前 评论

🐂🍺 大哥

3个月前 评论

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

3个月前 评论

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

3个月前 评论

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

3个月前 评论

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

3个月前 评论
guanguans (楼主) 3个月前

mark一下

3个月前 评论
guanguans (楼主) 3个月前

mark

3个月前 评论
guanguans (楼主) 3个月前

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

3个月前 评论
川夏 (作者) 3个月前
川夏 (作者) 3个月前

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

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

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

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

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

3个月前 评论
川夏 3个月前
川夏 3个月前

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

3个月前 评论
guanguans (楼主) 3个月前
zexploit (作者) 3个月前

优秀,收藏

3个月前 评论
guanguans (楼主) 3个月前

mark

3个月前 评论
guanguans (楼主) 3个月前

牛啊 老哥

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个月前
haaid

mark

2个月前 评论
guanguans (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!