!本项目不再维护,如果有人愿意接手维护可以联系我。
SQL 语句优化器和重写器
适用于 thinkphp5 SQL 语句优化器扩展包,基于 guanguans/soar-php
$ composer require guanguans/think-soar --dev
下载 XiaoMi 开源的 SQL 优化器 soar,更多详细安装请参考 soar install
# macOS
$ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.darwin-amd64
# linux
$ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64
# windows
$ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.windows-amd64
# 用其他命令或下载器下载均可以
配置,更多详细配置请参考 soar config
拷贝 config\soar.php
到 thinkphp
配置目录下,修改对应的配置,并设置 thinkphp
的 app_debug
、trace
配置为 true 。
方法调用示例:
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function tests()
{
$user = Db::table('fa_user')->where('id', 1)->select();
$sql = Db::table('fa_user')->fetchSql()->select();
// 最后一条sql语句评分
echo soar_score();
// 指定sql语句评分
echo soar_score($sql);
echo soar()->score($sql);
}
}
输出结果:
方法调用示例:
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function tests()
{
$user = Db::table('fa_user')->where('id', 1)->select();
$sql = Db::table('fa_user')->fetchSql()->select();
// 最后一条sql语句explain信息解读
echo soar_html_explain();
echo soar_md_explain();
// 指定sql语句评分explain信息解读
echo soar_html_explain($sql);
echo soar_md_explain($sql);
echo soar()->htmlExplain($sql);
echo soar()->mdExplain($sql);
}
}
输出结果:
方法调用示例:
$sql = 'selec * from fa_user';
echo soar_syntax_check();
echo soar_syntax_check($sql);
echo soar()->syntaxCheck($sql);
输出结果:
At SQL 1 : line 1 column 5 near "selec * from fa_user" (total length 20)
方法调用示例:
$sql = 'select * from fa_user where id=1';
echo soar_finger_print();
echo soar_finger_print($sql);
echo soar()->fingerPrint($sql);
输出结果:
select * from fa_user where id = ?
方法调用示例:
$sql = 'select * from fa_user where id=1';
var_dump(soar_pretty());
var_dump(soar_pretty($sql));
var_dump(soar()->pretty($sql));
输出结果:
SELECT
*
FROM
fa_user
WHERE
id = 1;
方法调用示例:
echo soar_md2html("## 这是一个测试");
echo soar()->md2html("## 这是一个测试");
输出结果:
...
<h2>这是一个测试</h2>
...
方法调用示例:
var_dump(soar_help());
var_dump(soar()->help());
输出结果:
···
'Usage of /Users/yaozm/Documents/wwwroot/soar-php/soar:
-allow-charsets string
AllowCharsets (default "utf8,utf8mb4")
-allow-collates string
AllowCollates
-allow-drop-index
AllowDropIndex, 允许输出删除重复索引的建议
-allow-engines string
AllowEngines (default "innodb")
-allow-online-as-test
AllowOnlineAsTest, 允许线上环境也可以当作测试环境
-blacklist string
指定 blacklist 配置文件的位置,文件中的 SQL 不会被评审。
···
方法调用示例:
$command = "echo '## 这是另一个测试' | /Users/yaozm/Documents/wwwroot/soar-php/soar.darwin-amd64 -report-type md2html";
echo soar_exec($command);
echo soar()->exec($command);
输出结果:
...
<h2>这是另一个测试</h2>
...