Php 通过更好的SQL获取使laravel提要更快?
为了一个学校项目,我一直在制作这个帖子、故事和小组的提要。但是我发现它很慢。 我正在考虑在SQL部分强制进行更多的处理,而不是在php端进行处理 我用的是来自的搜索工具。而且速度非常快。所以我很确定这是php代码: 而且算法也不是很好,所以我可以对下面的代码使用另一种意见/提示和技巧 应该放在FeedTransformer中的东西是一组Post、Story和Group模型。 然后将它们转换为一种像样的Json输出格式。在那里,我做了一些事情,比如Post->User,然后get被传递给userTransformer,它要求用户名等等,这样做是可能的,通过做不同的事情,它也可以得到优化Php 通过更好的SQL获取使laravel提要更快?,php,mysql,sql,laravel-5,Php,Mysql,Sql,Laravel 5,为了一个学校项目,我一直在制作这个帖子、故事和小组的提要。但是我发现它很慢。 我正在考虑在SQL部分强制进行更多的处理,而不是在php端进行处理 我用的是来自的搜索工具。而且速度非常快。所以我很确定这是php代码: 而且算法也不是很好,所以我可以对下面的代码使用另一种意见/提示和技巧 应该放在FeedTransformer中的东西是一组Post、Story和Group模型。 然后将它们转换为一种像样的Json输出格式。在那里,我做了一些事情,比如Post->User,然后get被传递给userT
public function feed() {
// pagination stuff
$perPage = 15;
$page = (Input::has( 'page' )? Input::get( 'page' ) : 1);
$offset = ( ( $page - 1 ) * $perPage );
// feed start
$feed = new Collection();
// start arrays
$posts = new Collection();
$stories = new Collection();
$groups = Auth::user()->groups;
// check if user has friends
if (Auth::user()->friends()->count() != 0) {
// get from good relationship
$friendCollection = Auth::user()->friends()->Where( 'relationShipStatus', '>', '50' );
// get all posts
$posts = Post::has( 'Stories', '=', 0 )->has( 'Group', '=', 0 )->whereIn(
'user_id', $friendCollection->lists( 'id' )
)->orWhere( 'user_id', Auth::user()->id )->has( 'Stories', '=', 0 )->has( 'Group', '=', 0 )->with('user')->get();
// get those stories
$stories = Story::whereIn(
'user_id', $friendCollection->lists( 'id' )
)->orWhere( 'user_id', Auth::user()->id )->get();
}
// merge together
$posts->isEmpty() ?: $feed = $feed->merge( $posts );
$stories->isEmpty() ?: $feed = $feed->merge( $stories );
$groups->isEmpty() ?: $feed = $feed->merge( $groups );
// sort by updated date
$feed->isEmpty() ?: $feed = $feed->sortBy( 'updated_at' )->reverse();
// apply pagination
$userFeed = new Paginator( $feed->slice( $offset, $perPage, true )->all(), $feed->count(), $page );
return $this->RespondWithPagination( $userFeed, $feed->count(), [ 'data' => FeedTransformer::transformCollection( $userFeed ) ] );
}
所有型号均可在此处找到:
变压器可在此处找到:
我已经把时间缩短到了3秒左右。我可以做一些改变,但我认为算法可以更好
我尝试添加->和标签,但这些似乎并没有降低速度。。。调用保持不变,对吗?输出应该是什么?请提供更多信息。您需要什么数据?@Jerodev更新了描述您的转换器正在运行查询获取和计数等,您的主要代码位运行不必要的查询,您有重复的代码位,例如列出您的好友集合,您正在选择所有数据,然后对其进行切割和分页。有很多要看的