Средняя продолжительность следующего запроса составляет 10 секунд:
SELECT masters_genres.*, masters_artists.*,
COUNT(masters_artists.master_id) as quantity FROM masters_genres
JOIN masters_artists ON masters_genres.master_id = masters_artists.master_id
WHERE masters_genres.genre='Electronic' GROUP BY masters_artists.artist_id
ORDER BY quantity DESC LIMIT 25
В таблицах 2 и 3 миллиона записей.
Структура таблицы:
-- -----------------------------------------------------
-- Table `music_data`.`masters_artists`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `music_data`.`masters_artists` (
`master_id` INT(30) NOT NULL,
`artist_id` INT(30) NOT NULL,
`artist_name` VARCHAR(500) CHARACTER SET 'utf8' NOT NULL,
INDEX `artist_id` (`artist_id` ASC),
INDEX `fk_masters_artists_masters_idx` (`master_id` ASC),
CONSTRAINT `fk_masters_artists_masters`
FOREIGN KEY (`master_id`)
REFERENCES `music_data`.`masters` (`master_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
-- -----------------------------------------------------
-- Table `music_data`.`masters_genres`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `music_data`.`masters_genres` (
`master_id` INT(30) NOT NULL,
`genre` VARCHAR(255) CHARACTER SET 'utf8' NOT NULL,
INDEX `genre` (`genre` ASC),
INDEX `fk_masters_genres_masters1_idx` (`master_id` ASC),
CONSTRAINT `fk_masters_genres_masters1`
FOREIGN KEY (`master_id`)
REFERENCES `music_data`.`masters` (`master_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
Что я могу сделать, чтобы ускорить этот запрос?
Я знаю, что скорость падает из-за ...
ORDER BY quantity DESC
но я не знаю, как улучшить свой запрос, чтобы получить правильные результаты.