Mysql использует индекс на (faver_profile_id, deleted, notice_id), когда он должен использовать индекс (faver_profile_id, удален, id). Странно, что для некоторых значений faver_profile_id он использует правильный индекс. Я могу использовать FORCE INDEX, который значительно ускоряет запрос, но я хотел бы выяснить, почему mysql делает это.Почему Mysql использует неверный индекс?
Это новая таблица (35-метровые строки), скопированная из другой таблицы с использованием INSERT INTO .. SELECT FROM. После этого я не запускал OPTIMIZE TABLE или ANALYZE. Может ли это помочь?
SELECT `Item`.`id` , `Item`.`cached_image` , `Item`.`submitter_id` , `Item`.`source_title` , `Item`.`source_url` , `Item`.`source_image` , `Item`.`nudity` , `Item`.`tags` , `Item`.`width` , `Item`.`height` , `Item`.`tumblr_id` , `Item`.`tumblr_reblog_key` , `Item`.`fave_count` , `Item`.`file_size` , `Item`.`animated` , `Favorite`.`id` , `Favorite`.`created`
FROM `favorites` AS `Favorite`
LEFT JOIN `items` AS `Item` ON ( `Favorite`.`notice_id` = `Item`.`id`)
WHERE `faver_profile_id` =11619
AND `Favorite`.`removed` =0
AND `Item`.`removed` =0
AND `nudity` =0
ORDER BY `Favorite`.`id` DESC
LIMIT 26
план выполнения запроса: "idx_notice_id_profile_id" индекс по (faver_profile_id, снятом notice_id)
1 | SIMPLE | Favorite | ref | idx_faver_idx_id,idx_notice_id_profile_id,notice_id_idx | idx_notice_id_profile_id | 4 | const,const | 15742 | Using where; Using filesort |
1 | SIMPLE | Item | eq_ref | PRIMARY | PRIMARY | 4 | gragland_imgfave.Favorite.notice_id | 1 | Using where
вы должны приложить план выполнения – ajreal
@ajreal хорошо добавляемые выше. – makeee