2010-12-02 16 views
2

Quel est le moyen le plus rapide?PHP et MYSQL façon optimisée de sélectionner par intervalle de date

a) $query="SELECT id FROM example WHERE date_sent>='".$date1."' AND date_sent<='".$date2."'";

ou

b) $query="SELECT id FROM example WHERE date_sent BETWEEN '".$date1."' AND '".$date2."'";

De plus, ce qui est plus rapide et mieux si j'ai une date dans le format '02/12/2010' ?

a) pour transformer en php la date à un format comme '2010-12-02' et le comparer directement 'WHERE date_sent>=2010-12-02'

ou

b) utiliser la fonction mysql: 'WHERE date>=str_to_date('02/12/2010','%d/%m/%Y')'?

Merci

Répondre

2

Il est toujours plus rapide de convertir la chaîne de date dans le format de date natif utilisé par le serveur SQL. Vous n'avez pas besoin d'exécuter une fonction de conversion, ni le serveur doit exécuter une conversion.

BETWEEN est généralement plus rapide, car il est géré par un code spécifique sur le backend. Où le <=> = est un code généralisé et doit être testé. Assurez-vous également que vous avez des index appropriés.

Utilisez aussi PDO, $ query = "SELECT id FROM exemple WHERE date_sent ENTRE? ET?";

+0

+1 pour l'indicateur PDO. J'allais simplement ajouter cela à ma réponse. –

2

manuel MySQL Says:

Si expr est supérieur ou égal à min et expr est inférieure ou égale à max, BETWEEN retourne 1, sinon il retourne 0. Ce est équivalent à l'expression (min < = expr ET expr < = max) si tous les arguments sont du même type.


De plus, ce qui est plus rapide et mieux si j'ai une date dans le format '02/12/2010' ?

Convertissez cette colonne en type DATETIME ou similaire si c'est VARCHAR.