Question

Je voudrais accélérer une requête MySQL qui permet de récupérer une page de données en suivant le schéma ci-dessous

select
 my_field_A,
 my_field_B
where
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Le champ time_id est un index MySQL. Toutefois, la requête se comporte comme si la base de données entière était lue à chaque requête (l'extraction de quelques lignes étant déjà assez lente). Je ne suis pas un expert en MySQL. Quelqu'un peut-il deviner ce que je fais mal?

Était-ce utile?

La solution

Assurez-vous que vous avez un index (B-tree) sur time_id, cela devrait être efficace pour les requêtes de plage. Assurez-vous également que time_id est au format d'heure approprié.

Si vous voulez vraiment comprendre ce que fait mysql, vous pouvez ajouter le mot clé 'expliquer' en face de la requête et l'exécuter dans votre client mysql. Cela affichera des informations sur ce que fait mysql et le type d’analyses effectuées.

http://dev.mysql.com/doc /refman/5.0/en/using-explain.html

Autres conseils

Comme il y a probablement beaucoup de time_id dans ces critères, MySQL peut penser que l'analyse complète du tableau est meilleure.

Essayez de forcer l'index:

SELECT
 my_field_A,
 my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Avez-vous besoin de la plage inférieure? Y a-t-il des entrées antérieures à 1901? Comment la colonne time_id est-elle générée? Si le time_id est toujours supérieur à chaque nouvelle entrée ajoutée dans la base de données, vous pouvez envisager de rechercher un ID avec l'entrée la plus proche de 2009-01-16, puis de sélectionner par ID

select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?

Si ce n'est pas le cas, essayez de vérifier le partitionnement disponible depuis MySQL 5.1 et décomposez le tableau par années, cela devrait augmenter considérablement la vitesse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top