J'essaie d'optimiser une requête sql qui utilise order by clause. Lorsque j'utilise EXPLAIN, la requête affiche toujours "using filesort". J'applique cette requête à un forum de discussion de groupe dans lequel des balises sont attachées à des publications par des utilisateurs.SQL Query utilise toujours filesort dans l'ordre par la clause
Voici les 3 tables: J'utilise les utilisateurs, user_tag, tags
user_tag est la table de mappage d'association pour les utilisateurs et leurs mots clés.
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;
Je mets à jour le use_count du côté serveur en utilisant la programmation. Voici la requête qui me pose problème. La requête est de trouver le tag_id et usage_count un nom d'utilisateur particulier, Triés par utilisation par ordre décroissant
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;
Voici l'expliquer sortie:
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;
Qu'est-ce que devrais-je changer pour perdre ce "Using filesort"
Vous ne montrez pas réellement la sortie d'EXPLAIN. Vous devez probablement également fournir la sortie de SHOW CREATE TABLE pour chaque table. Cela montrera les index sur les tables. –
@George - J'ai posté le lien vers la sortie de EXPLAIN. Également modifié la question pour montrer les index. – vikmalhotra
@OMG Poneys Je crois qu'ils sont synonymes dans la plupart des cas, sinon tous. –