Laravel 添加DB Listener与MYSQL索引小记
在完成部分新功能的开发后,因为不知道Laravel的ORM有tranform的功能(参考:https://www.cnblogs.com/yjf512/p/4423931.html),所以增加了很多数据format的方法,所以打算把api执行后打印下sql看看有没有什么大问题。
Laravel添加DB Listener
首先到Laravel加一个sql的监听器,把sql打印到/storage/logs/laravel.log里
1.到/app/Providers/EventProvider.php里增加
protected $listen = [
'Illuminate\Database\Events\QueryExecuted' => [
'App\Listeners\QueryListener'
]
];
2.到/app/Listeners新建QueryListener.php
<?php
namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
class QueryListener
{
/**
* QueryListener constructor.
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param QueryExecuted $event
* @return void
*/
public function handle(QueryExecuted $event)
{
//
$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
logger()->info($log);
}
}
完成了,刷新下页面或者请求下借口就能在/storage/logs/laravel.log看到。
注:某些编辑器(如PS、WS)只会打开前XXX行 好像不能全览。
关于MYSQL的索引
在拿SQL来进行explain时发现一个比较奇怪的情况
一个表有user_id package_id和其他的字段
当前表数据不多 十来条 大多数数据user_id=1 package_id没有重合
查询where user_id = 1时 explain的type是all ref是null
查询where package_id=12时 explain的type是ref ref是const
感觉到异样后我塞了十几条package_id=1的数据进去再where package_id = 1时type=all ref=null
好吧,想起以前学MYSQL好像讲过某些情况下MYSQL认为ALL快的话就会用ALL。
先标记一下一些疑问 有空再查下资料
1.这个是属于MYSQL的那部分功能/机制
2.在不同引擎是否有区分
3.支持的版本
4.简单了解其原理