J'ai un tableau avec les champs suivants: userid, logintime, date de naissance
Je dois obtenir TOUS les utilisateurs entre la date de naissance X et Y commandés avec le plus récemment connecté en premier.mysql question result commande numéro
SELECT *
FROM table
WHERE birtdate BETWEEN x AND Y
ORDER BY logintime DESC
Si je définissais un index sur birtdate, MySQL utiliseraient filesort pour commander les résultats que je voudrais éviter (tableau commence à être grande, la requête est populaire).
Définition d'un index (logintime, date de naissance) ne me fait pas de sens puisque logintime est même pas dans la clause WHERE (je ne restreindre le jeu de résultats par date de naissance)
Toutes les solutions élégantes dans MySQL?
Au moment de l'indice est uniquement sur la date de naissance, mais le filesort commence la tourbière de la base de données vers le bas. L'index est utilisé pour BETWEEN, ce qui n'est pas un problème. J'espérais qu'il y aurait une solution dans mysql qui ne nécessiterait pas de modules complémentaires (memcache) etc. – Rado
voulez-vous essayer d'indexer birtdate, logintime (comme indiqué ci-dessus, l'ordre importe, index sur logintime, birtdate ne peut pas satisfaire la requête –