where等于零太慢了

6psbrbz9  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(363)

我使用的是laravel5.6和mysql for db

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 )

为什么第二个查询这么慢?如何解决这个问题

waxmsbnn

waxmsbnn1#

mysql默认情况下将其索引存储在btree中。一般没有散列。
对于性能差异的简单答案是>窗体比=窗体计算更多的节点。

s8vozzvw

s8vozzvw2#

如果经常使用price列进行搜索,可以考虑向该列添加索引以提高性能:

CREATE INDEX books_price_idx ON books (price)

相关问题