laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化


laravel-soar - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化。
源码 https://github.com/guanguans/laravel-soar
功能
  • 支持启发式算法语句优化建议、索引优化建议
  • 支持 EXPLAIN 信息丰富解读
  • 自动监控输出 SQL 优化建议
  • Debug bar、Soar bar、JSON、Clockwork、Console、Dump、Log、自定义输出器(多种场景输出)
  • 支持查询构建器生成 SQL 优化建议
安装
$ composer require guanguans/laravel-soar --dev -vvv

配置 注册服务
laravel
$ php artisan vendor:publish --provider="Guanguans\\LaravelSoar\\SoarServiceProvider"

lumen 将以下代码段添加到 bootstrap/app.php 文件中的 Register Service Providers 部分下:
$app->register(\Guanguans\LaravelSoar\SoarServiceProvider::class);

使用(示例代码) 自动监控输出 SQL 优化建议
  • Json 响应(完整示例)
{ "message": "ok", "soar_scores": [ { "Summary": "[☆☆☆☆☆|0分|3.56ms|select * from `users` where `name` = 'soar' group by `name` having `created_at` > '2022-04-19 18:24:33']", "HeuristicRules": [ ... { "Item": "GRP.001", "Severity": "L2", "Summary": "不建议对等值查询列使用 GROUP BY", "Content": "GROUP BY 中的列在前面的 WHERE 条件中使用了等值查询,对这样的列进行 GROUP BY 意义不大。", "Case": "select film_id, title from film where release_year='2006' group by release_year", "Position": 0 }, ... ], "IndexRules": [ { "Item": "IDX.001", "Severity": "L2", "Summary": "为laravel库的users表添加索引", "Content": "为列name添加索引; 为列created_at添加索引; 由于未开启数据采样,各列在索引中的顺序需要自行调整。", "Case": "ALTER TABLE `laravel`.`users` add index `idx_name_created_at` (`name`(191),`created_at`) ; \n", "Position": 0 } ], "Explain": [], "Backtraces": [ "#13 /app/Admin/Controllers/HomeController.php:74", "#55 /Users/yaozm/Documents/develop/laravel-soar/src/Http/Middleware/OutputSoarScoreMiddleware.php:45", "#76 /public/index.php:55", "#77 /server.php:21" ] }, ... ] }

  • Soar bar
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • Debug bar
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • Clockwork
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • Console
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • Dump
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • Log
laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化
文章图片

  • 自定义输出器
实现该接口

【laravel-soar(2.x)|laravel-soar(2.x) - 自动监控输出 SQL 优化建议、辅助 laravel 应用 SQL 优化】config/soar.php 文件中配置输出器即可
[ // \Guanguans\LaravelSoar\Outputs\ClockworkOutput::class, // \Guanguans\LaravelSoar\Outputs\ConsoleOutput::class, // \Guanguans\LaravelSoar\Outputs\DumpOutput::class => ['exit' => false], \Guanguans\LaravelSoar\Outputs\JsonOutput::class, \Guanguans\LaravelSoar\Outputs\LogOutput::class => ['channel' => 'daily'], \Guanguans\LaravelSoar\Outputs\DebugBarOutput::class, \Guanguans\LaravelSoar\Outputs\SoarBarOutput::class, ], ... ];

Soar 实例及方法
soar(); // 获取 Soar 实例 app('soar'); // 获取 Soar 实例/** * Soar 门面. * * @method static string score(string $sql)// SQL 评分 * @method static array arrayScore(string $sql)// SQL 数组格式评分 * @method static string jsonScore(string $sql)// SQL json 格式评分 * @method static string htmlScore(string $sql)// SQL html 格式评分 * @method static string mdScore(string $sql)// SQL markdown 格式评分 * @method static string explain(string $sql)// explain 解读信息 * @method static string mdExplain(string $sql)// markdown 格式 explain 解读信息 * @method static string htmlExplain(string $sql)// html 格式 explain 解读信息 * @method static null|string syntaxCheck(string $sql) // 语法检查 * @method static string fingerPrint(string $sql)// SQL 指纹 * @method static string pretty(string $sql)// 格式化 SQL * @method static string md2html(string $sql)// markdown 转 html * @method static string help()// Soar 帮助 * @method static null|string exec(string $command)// 执行任意 Soar 命令 * @method static string getSoarPath()// 获取 Soar 路径 * @method static array getOptions()// 获取 Soar 配置选项 * @method static Soar setSoarPath(string $soarPath)// 设置 Soar 路径 * @method static Soar setOption(string $key, $value)// 设置 Soar 配置选项 * @method static Soar setOptions(array $options)// 批量设置 Soar 配置选项 * * @see \Guanguans\SoarPHP\Soar * @see \Guanguans\LaravelSoar\Soar */ class Soar{}

查询构建器方法
namespace Illuminate\Database\Eloquent { /** * @method string toRawSql() * @method voiddumpRawSql() * @method voidddRawSql() * @method arraytoSoarArrayScore() * @method voiddumpSoarArrayScore() * @method voidddSoarArrayScore() * @method string toSoarJsonScore() * @method voiddumpSoarJsonScore() * @method voidddSoarJsonScore() * @method string toSoarHtmlScore() * @method voidechoSoarHtmlScore() * @method voidexitSoarHtmlScore() * @method string toSoarHtmlExplain() * @method voidechoSoarHtmlExplain() * @method voidexitSoarHtmlExplain() * * @see \Guanguans\LaravelSoar\Support\Macros\QueryBuilderMacro */ class Builder { } }

    推荐阅读