Je dois obtenir toutes les entrées dans la base de données qui ont un publish_date entre deux dates. Toutes les dates sont stockées en tant que nombres entiers car les dates sont au format UNIX TIMESTAMP ... La requête suivante fonctionne parfaitement mais elle prend "trop de temps". Il retourne toutes les entrées faites entre 10 et 20 dazs il y a.Optimisation de la requête SQL
SELECT * FROM tbl_post WHERE published < (UNIX_TIMESTAMP(NOW())-864000)
AND published> (UNIX_TIMESTAMP(NOW())-1728000)
Existe-t-il un moyen d'optimiser cette requête? Si je ne me trompe pas, il appelle les commandes NOW() et UNIX_TIMESTAMP sur evey. Je pensais que sauvegarder le résultat de ces 2 fonctions répétitives dans mysql @var rendait la comparaison beaucoup plus rapide, mais ce n'était pas le cas. 2ème code que je cours était:
SET @TenDaysAgo = UNIX_TIMESTAMP(NOW())-864000;
SET @TwentyDaysAgo = UNIX_TIMESTAMP(NOW())-1728000;
SELECT * FROM tbl_post WHERE fecha_publicado < @TenDaysAgo
AND fecha_publicado > @TwentyDaysAgo;
Une autre chose est source de confusion que PHP ne peut pas exécuter la requête mysql_query Bove de throught(); ?!
S'il vous plaît, si vous avez des commentaires sur ce problème, il sera plus que bienvenu :)
Luka
Notez que 'NOW()' est une expression constante qui représente le début de l'exécution de l'instruction. Il n'y a donc aucune raison pour que MySQL ne puisse pas convertir 'UNIX_TIMESTAMP (NOW()) - 864000' en une expression constante. (Je ne sais pas si c'est le cas ... juste qu'il pourrait facilement.) – Matthew