J'ai une table tb_profilecomments:requête MySQL simple bloque lors de l'ajout ORDER BY avec LIMIT
4,3 GIB - 8 millions de lignes au total - InnoDB
avec 3 indices:
La requête est simple je lance:
SELECT *
FROM tb_profilecomments
WHERE profilecomment_user_id=6430
ORDER BY profilecomment_id DESC
Obtenir un résultat en moins d'une seconde (16 000+ lignes). Lorsque j'ajoute maintenant LIMIT 1, 5
à la requête, je dois attendre plus de 2 minutes pour obtenir un résultat.
Je ne sais pas ce qui se passe dans l'arrière-plan mysql pourquoi il ralentit si fortement la requête.
Lorsque je supprime ORDER BY
ou LIMIT
de la requête, tout va bien. Lors du tri par colonne non indexée profilecomment_date
, il est lent (7 secondes), mais pas 2 minutes comme lors du tri et de la limitation avec la clé primaire indexée profilecomment_id
.
Avez-vous une idée de ce qui ne va pas? Un index cassé peut-être? Comment savoir? Comment réparer? ANALYZE TABLE indique le message "ok".
EXPLAIN tb_profilecomments:
SHOW CREATE TABLE tb_profilecomments:
résultat EXPLAIN SELECT * FROM tb_profilecomments WHERE profilecomment_user_id=6430 ORDER BY profilecomment_id DESC LIMIT 1, 5
:
Avez-vous utilisé [13.8.2 Syntaxe EXPLAIN] (http://dev.mysql.com/doc/refman/5.6/fr/explain.html)? Cela peut fournir des informations qui peuvent être utiles. – wchiquito
Pouvez-vous nous montrer la sortie de 'show create table tb_profilecomments'? Le comportement que vous décrivez semble incompatible avec la structure. –
@wchiquito a ajouté le résultat de la commande EXPLAIN TABLE – lickmycode