MySQL использует 1 индекс на таблицу в запросе.
Чтобы запустить индексы, посмотрите, какие элементы содержатся в предложении WHERE
.
Это означает, что должно быть:
audit_main
, который начинается с certification_id
; farmer_details
, который начинается с mill_id
, administrative_division_id
(любой порядок);и address
, который начинается с village_id
Затем посмотрите, к каким таблицам они присоединены, и если это не первичный ключ, добавьте это:
audit_main
имеет id
, который, поскольку предполагается, что он является PK, добавлять не нужно. farmer_details
имеет farmer_id
(предполагается, что PK) address
имеет id
, предполагается, что PK, farmer
имеет address_id
и user_id
(предполагается PK)
Наконец, посмотрите на набор результатов.В этом случае только audit_main.score
, к которому можно добавить поле малой длины.
Итак, предположим, что индексы еще не существуют:
CREATE INDEX idxCertScore ON audit_main (certification_id,score);
CREATE INDEX idxMillAdminDiv ON farmer_details (mill_id, administrative_division_id);
CREATE INDEX idxAddress ON farmer ( address_id);
CREATE INDEX idxVillage ON address (village_id );
После добавления этих индексов покажитеEXPLAIN SELECT ...
запрос, чтобы увидеть, все ли они используются правильно.
Ссылки: