j'ai une requête élémentaire qui prend trop de temps pour exécuter même sur de petites tables (< 100 000 lignes):Accélérer la requête avec JOIN, où, groupe par, et compter
select images.classification, count(boxes.id)
from images
join boxes on images.id = boxes.image_id
where boxes.round = 0
group by images.classification;
Je indices sur les boîtes .round, boxes.image_id et images.classification (seulement varchar dans cette requête). Clés primaires sur boxes.id et images.id. Expliquer indique qu'il profite de l'index boxes.round. Les suppléments sont: Using where; Using temporary; Using filesort
.
Est-il possible d'accélérer cette requête? Comment?
Si cela est important, le serveur est MySQL 5.1 avec des tables MyISAM.
(Cette question est similaire à How to speed up "select count(*)" with "group by" and "where"?)
pleine EXPLAIN:
mysql> explain select images.classification, count(boxes.id) from images join boxes on images.id = boxes.image_id where boxes.round = 0 group by images.classification;
| 1 | SIMPLE | boxes | ref | ix_boxes_image_id,ix_boxes_round | ix_boxes_round | 5 | const | 64162 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | images | eq_ref | PRIMARY | PRIMARY | 4 | vatic.boxes.image_id | 1 | |
Pourriez-vous poster la sortie du 'EXPLAIN'? – Piskvor
@Piskvor, ajouté. – carl
Merci, c'est un élément de données plutôt crucial. – Piskvor