J'ai une table dans mysql avec plus de 80M dossiers. Dans le moteur MYISAM.Requête lente lors de l'utilisation de l'ordre avec limite 1
Quand je lance cette requête
SELECT id FROM mytable WHERE (key1=-5) AND key2=467476 ORDER BY id DESC LIMIT 1
requête est lente et après 5 minutes je dois tuer requête pour libérer la table.
Mais quand je simplement augmenter la taille limite ce travail de recherche avec succès dans 44ms
Par exemple (j'augmente simplement la taille limite):
SELECT id FROM mytable WHERE (key1=-5) AND key2=467476 ORDER BY id DESC LIMIT 2
Maintenant, pour résoudre ce problème que je tente la requête suivante et ce travailler avec succès (ce qui est une solution temporaire)
SELECT id FROM (SELECT id FROM mytable WHERE (key1=-5) AND key2=467476 ORDER BY id DESC LIMIT 2) AS tbl ORDER BY id DESC LIMIT 1
note : id est pr imary et auto increment!
Mise à jour:
key1 ==> folder_id
key2 ==> userid
CREATE TABLE `bm60_mails` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL DEFAULT '0',
`betreff` varchar(255) CHARACTER SET utf8 NOT NULL,
`von` varchar(255) CHARACTER SET utf8 NOT NULL,
`an` varchar(255) CHARACTER SET utf8 NOT NULL,
`cc` varchar(255) CHARACTER SET utf8 NOT NULL,
`body` longtext NOT NULL,
`folder` int(11) NOT NULL,
`datum` int(11) NOT NULL DEFAULT '0',
`trashstamp` int(11) NOT NULL,
`priority` enum('low','normal','high') NOT NULL,
`fetched` int(11) NOT NULL DEFAULT '0',
`msg_id` varchar(128) CHARACTER SET utf8 NOT NULL,
`virnam` varchar(128) CHARACTER SET utf8 NOT NULL,
`trained` tinyint(4) NOT NULL DEFAULT '0',
`refs` text CHARACTER SET utf8 NOT NULL,
`flags` int(11) NOT NULL DEFAULT '-1',
`size` int(11) NOT NULL,
`color` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `mailUser` (`userid`),
KEY `mailFlags` (`flags`),
KEY `mailFolder` (`folder`)
) ENGINE=MyISAM AUTO_INCREMENT=95953499 DEFAULT CHARSET=latin1
Est-ce que 'key1' et' key2' sont indexés? – sagi
Je ne suis pas sûr du problème 'LIMIT', peut-être' LIMIT 1' nécessite que la table entière soit triée, alors qu'un nombre plus élevé pourrait être un tri partiel. Question: Avez-vous des indices sur key1 ou key2? Nous pouvons peut-être accélérer votre requête, quelle qu'elle soit. –
Veuillez soumettre une explication des deux requêtes. C'est plutôt intéressant. –