我正在为数据库使用 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条记录,但RESPONSE在8000毫秒内。代码中唯一的区别是 “等于”
where('price', '>', 0 )
和
where('price', '=', 0 )
为什么第二个查询这么慢?以及如何解决这个问题
最佳答案
MySQL 默认将其索引存储在 BTREE 中。一般没有散列。
对于性能差异的简短回答是 > 形式比 = 形式计算更多的节点。
关于php - 等于零的地方太慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52163065/