Я пытаюсь оптимизировать SQL-запрос, который использует заказ по предложению. Когда я использую EXPLAIN, запрос всегда отображает «используя файловую сортировку». Я применяю этот запрос для группового дискуссионного форума, где к сообщениям пользователей прикреплены теги.
Вот 3 таблицы, которые я использую: users, user_tag, tags
user_tag - таблица сопоставления ассоциаций для пользователей и их тегов.
CREATE TABLE `usertable` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`user_name`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `user_tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`tag_id` int(11) unsigned NOT NULL,
`usage_count` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `tag_id` (`tag_id`),
KEY `usage_count` (`usage_count`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Я обновляю account_count на стороне сервера, используя программирование. Вот запрос, который доставляет мне проблемы. Запрос состоит в том, чтобы выяснить tag_id и use_count для определенного имени пользователя, отсортированные по количеству использований в порядке убывания
select user_tag.tag_id, user_tag.usage_count
from user_tag inner join usertable on usertable.user_id = user_tag.user_id
where user_name="abc" order by usage_count DESC;
Вот вывод объяснения:
mysql> explain select
user_tag.tag_id,
user_tag.usage_count from user_tag
inner join usertable on
user_tag.user_id = usertable.user_id
where user_name="abc" order by
user_tag.usage_count desc;
Объясните вывод здесь
Что я должен изменить, чтобы потерять это "Использование файловой сортировки"