Спасибо за внимание.
Существует две таблицы INNODB:
Таблица авторы
id INT
nickname VARCHAR(50)
status ENUM('active', 'blocked')
about TEXT
Таблица книги
author_id INT
title VARCHAR(150)
Я выполняю запрос к этим таблицам, чтобы получить каждого автора и количество книг, которые у него есть:
SELECT a. * , COUNT( b.id ) AS book_count
FROM authors AS a, books AS b
WHERE a.status != 'blocked'
AND b.author_id = a.id
GROUP BY a.id
ORDER BY a.nickname
Этот запрос очень медленный (занимает около6 секунд, чтобы выполнить).У меня есть индекс для books.author_id
, и он отлично работает, но я не знаю, как создать индекс для таблицы authors
, чтобы этот запрос мог его использовать.
Вот как выглядит текущий EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a ALL PRIMARY,id_status_nickname NULL NULL NULL 3305 Using where; Using temporary; Using filesort
1 SIMPLE b ref key_author_id key_author_id 5 a.id 2 Using where; Using index
Я смотрел руководство по MySQL по оптимизации запросов с помощью группы , но не смог понять, как его применить к моему запросу.
IБуду признателен за любую помощь и советы по этому вопросу - какой должна быть структура индекса, чтобы MySQL мог использовать его?
Редактировать
Я пробовал:
(id, status, nickname)
(status, nickname)
Оба привели к одной и той же ситуации.