J'ai encore le problème suivantordre par des causes filesort
EXPLAIN EXTENDED SELECT
`item`.`id`,
`item`.`timestamp`,
`item`.`label`
FROM
item
WHERE
item.dataTypeId=30
GROUP BY
item.id
ORDER BY
item.timestamp DESC
LIMIT 0,6;
Id & horodatage est une paire clé primaire (MEDIUMINT + datetime) dataTypeId est une clé étrangère (MEDIUMINT) Table est créé comme InnoDb
Il peut y avoir plus d'enregistrements avec le même ID et un horodatage différent (versions du même article). C'est la raison pour grouper par.
Je lis par exemple celui-ci: similar topic on stackoverflow
mais il na pas résoudre mon problème.
J'ai essayé de créer des index suivants:
-
index
- sur (dataTypeId, id, horodatage) - dans cet ordre index
- sur (dataTypeId, horodatage) - dans cet ordre
- index sur id index
- sur timestamp
les deux dernières est un petit morceau de désespoir
Je pense que je dois manquer quelque chose de base -
mais ne sais vraiment pas quoi.
Ne vous attendez pas la solution (ce serait bien :) me botter le bon sens :)
sort_buffer_size est maintenant 4194288
modifier: expliquer - aucun index
"1" "SIMPLE" "item" "ref" "FK_dataTypeId" "FK_dataTypeId" "4" "const" "5608" "Using where; Using temporary; Using filesort"
expliquer avec les index créés
"1" "SIMPLE" "item" "ref" "FK_udssDataItem_1,testIndexType,testIndexTypeTimestamp,testIndexTypeIdTime" "FK_udssDataItem_1" "4" "const" "5632" "Using where; Using temporary; Using filesort"
Le tri des fichiers ne signifie pas lent, s'il vous plaît jeter dans la ** EXPLAIN ** résultats de la requête – ajreal
la requête sur 5000 lignes prend 2secondes, j'ai simplifié ma requête originale à la taille minimale - et essayer étape par étape, sauf un raison possible après l'autre. Le seul "point chaud" dans EXPLAIN est celui avec "filesort". D'autres lignes fonctionnent via des index avec un petit nombre de lignes ... – jakub
Tout d'abord, vous êtes GROUPing par ID, mais vous passez commande par horodatage ... cela n'a aucun sens logique. Vous devriez probablement commander par une fonction d'agrégat (AVG/MAX/MIN) sur l'horodatage. – Riedsio