Mysql Indexing для Laravel Eloquent - PullRequest
0 голосов
/ 13 июня 2018

У меня постоянно растет таблица в базе данных MySQL.Мне нужно выполнить операцию выбора, которая выглядит следующим образом:

$discountedBooks=
\App\Entities\Books::select('id','published_date','status','chargeable','author')
->whereRaw('DATE(published_date) = "'.$date.'"')
->whereStatus('Completed')
->whereChargeable(1);

Я назначил индекс для таблицы книг

Но когда я объясняю выполненный запрос, я не вижу индексиспользовался.Любые предложения о том, как мне это реализовать?

enter image description here enter image description here

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Вы проиндексировали дату расписания, но использовали дату публикации.Jus

0 голосов
/ 14 июня 2018

Просто используйте where('published_date', $date) или wherePublishedDate($date).

MySQL может использовать индекс только при запросе целого столбца или левого префикса.Хотя DATE(published_date) технически возвращает весь столбец, MySQL не знает этого и поэтому не может использовать индекс.

Вы должны использовать whereRaw(), только если это необходимо.Если вы используете его, всегда используйте привязки ( SQL-инъекция ):

->whereRaw('DATE(published_date) = ?', [$date])
0 голосов
/ 13 июня 2018

Даже если вы проиндексировали schedule_date , вы не используете его.Вы используете publ_date , которое вы должны были проиндексировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...