查詢數(shù)據(jù)量大秸歧,導(dǎo)致接口返回慢,這是我近期優(yōu)化的重點(diǎn)。
日志不完善猎醇,排錯(cuò)速率很慢窥突,因此增加了日志輸出。
mysql 查詢語句輸出
function get_sql_query($queryBuilder)
{
$sql = $queryBuilder->createCommand()->getRawSql();
// 如果是控制臺(tái)應(yīng)用
if (strstr(Yii::$app->id, "console")) {
return $sql;
}
// 否則輸出接口
return print_r(array("api" => sprintf("%s %s", request()->getMethod(), request()->getUrl()),"sql" => $sql), true);
}
elastic 查詢語句輸出
這個(gè)查詢語句封裝的代碼姑食,是從yii框架中扒出來的波岛,對(duì)返回內(nèi)容進(jìn)行了一些整合
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);
};
// 如果是控制臺(tái)應(yīng)用
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);
}