Где равен нулю так медленно

Я использую 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 )

Почему второй запрос такой медленный? И как это исправить

3

Решение

MySQL хранит свои индексы по умолчанию в BTREE. Нет хеширования в общем.

Краткий ответ на разницу в производительности заключается в том, что форма> оценивает больше узлов, чем форма =.

0

Другие решения

Если вы часто используете колонку цен для поиска
Вы можете добавить индекс в этот столбец, чтобы повысить производительность:

CREATE INDEX books_price_idx ON books (price)
0

По вопросам рекламы [email protected]