查询数据量大,导致接口返回慢,这是我近期优化的重点。
日志不完善,排错速率很慢,因此增加了日志输出。
mysql 查询语句输出
function get_sql_query($queryBuilder)
{
$sql = $queryBuilder->createCommand()->getRawSql();
// 如果是控制台应用
if (strstr(Yii::$app->id, "console")) {
return $sql;
}
// 否则输出接口
return print_r(array("api" => sprintf("%s %s", request()->getMethod(), request()->getUrl()),"sql" => $sql), true);
}
elastic 查询语句输出
这个查询语句封装的代码,是从yii框架中扒出来的,对返回内容进行了一些整合
function get_es_query(\yii\elasticsearch\Query $queryBuilder)
{
$cmd = $queryBuilder->createCommand();
$query = $cmd->queryParts;
if (empty($query)) {
$query = '{}';
}
if (is_array($query)) {
$query = \yii\helpers\Json::encode($query);
}
$url = [$cmd->index !== null ? $cmd->index : '_all'];
if ($cmd->type !== null) {
$url[] = $cmd->type;
}
$url[] = '_search';
$createUrl = function ($path, $options = []) {
if (!is_string($path)) {
$url = implode('/', array_map(function ($a) {
return urlencode(is_array($a) ? implode(',', $a) : $a);
}, $path));
if (!empty($options)) {
$url .= '?' . http_build_query($options);
}
} else {
$url = $path;
if (!empty($options)) {
$url .= (strpos($url, '?') === false ? '?' : '&') . http_build_query($options);
}
}
return urldecode($url);
};
// 如果是控制台应用
if (strstr(Yii::$app->id, "console")) {
return print_r(["url" => sprintf("%s %s", "GET", $createUrl($url, $cmd->options)), "query" => $query], true);
}
// 否则输出接口
return print_r(["api" => sprintf("%s %s", request()->getMethod(), request()->url), "url" => sprintf("%s %s", "GET", $createUrl($url, $cmd->options)), "query" => $query ], true);
}