php - 等于零的地方太慢了

标签 php mysql laravel laravel-5.6 mysql-8.0

我正在为数据库使用 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/

相关文章:

javascript - 将变量传递给 Javascript 以进行 Ajax

mysql - iRedMail 缺少 apache2-mod-auth-mysql

mySQL 在 WHERE 子句中重用计算值

php - 在 Laravel 7 中找不到类 'Form'

php - 如何使用 Prestashop 客户数据登录 Laravel,而不是使用 Laravel 本地用户数据

javascript - 使用按钮插入时间取决于单击的字段?

php - 使用 php 将交易推送到 Google Analytics

php - Twig:选择某些 block 并渲染它们

mysql - HAProxy:从 DBCP 断开连接,为什么?

php - Composer 更新没有说明要安装或更新