我正在为 DB 使用 Laravel 5.6 和 MySQL
public function getTopPaid(){
$books = Book::with('users')->where('price', '>', 0 )->get()
->sortByDesc(function ($book){
return $book->users->count();//sorting by purchased users count
})->take(25);
return new BooksWithAuthors($books);
}
我想用上面的代码获得购买次数最多的付费书籍。这很好,响应时间为 1700 毫秒。大约400条记录。
但是下面的代码几乎相同:
public function getTopFree(){
$books = Book::with('users')->where('price', '=', 0 )->get()
->sortByDesc(function ($book){
return $book->users->count();
})->take(25);
return new BooksWithAuthors($books);
}
结果只有 34 条记录,但响应时间为 8000 毫秒。代码中唯一的区别是“相等”
where('price', '>', 0 )
和
where('price', '=', 0 )
为什么第二个查询这么慢?以及如何解决这个问题