1 Description du problème : interroger des données en fonction des dates de début et de fin. En raison de la grande quantité de données de la base de données, l'utilisation entre et est très lente, nous avons donc ajouté les champs année, mois et jour. Il existe deux méthodes, substr et. date, en comparant l'année, le mois et le jour, j'ai essayé les deux et le temps de chargement a changé à chaque fois, et je n'ai trouvé aucun article technique pertinent. En théorie, les deux vitesses sont-elles similaires ou existe-t-il une méthode relativement plus rapide ? Merci à tous ceux qui ont répondu.
2. Extraits de code pertinents :
//substr
if(substr($startTime,0,4) == substr($endTime,0,4)){
$str .= " L.year = ".substr($startTime,0,4);
if(substr($startTime,4,2) == substr($endTime,4,2)){
$str .= " et L.month = ".substr($startTime,4,2);
if(date('Ynd',strtotime($startTime)) == date('Ynd',strtotime($endTime))){
$str .= " et day = ".date('d',strtotime($startTime));
}autre{
$str .= " et log_date entre '$startTime' et '$endTime' ";
}
}autre{
$str .= " et log_date entre '$startTime' et '$endTime' ";
}
}autre{
$str .= "L.log_date entre $startTime et $endTime" ;
}
//date
if(date('Y',strtotime($startTime)) == date('Y',strtotime($endTime))){
$str = " où année = ".date('Y',strtotime($startTime));
if(date('Yn',strtotime($startTime)) == date('Yn',strtotime($endTime))){
$str .= " et mois = ".date('n',strtotime($startTime));
if(date('Ynd',strtotime($startTime)) == date('Ynd',strtotime($endTime))){
$str .= " et day = ".date('d',strtotime($startTime));
}autre{
$str .= " et log_date entre '$startTime' et '$endTime' ";
}
}autre{
$str .= " et log_date entre '$startTime' et '$endTime' ";
}
}autre{
$str = " où log_date entre '$startTime' et '$endTime' ";
}
Que vous utilisiez substr pour intercepter les 4 premiers chiffres ou la date('Y'), vous exécutez simplement PHP. Ignorez le décalage horaire en PHP. Le SQL final sera le même et n'affectera pas l'efficacité de la requête de base de données.
Vous devez publier l'instruction SQL qui doit être exécutée afin que tout le monde puisse voir si elle peut être optimisée
La structure de l'index et de la table a-t-elle été optimisée ? Sinon, l'optimiser d'abord améliorera considérablement la vitesse. Sinon, envisagez de diviser la table ou quelque chose du genre.
Je pense que vous devriez essayer d'écrire directement la recherche de l'année pour voir s'il y a une amélioration des performances. Dans ce cas, transmettez simplement la valeur souhaitée directement à la réception
Pas très familier avec PHP, mais si la base de données contient une grande quantité de données, vous devez vérifier l'instruction de requête pour créer un index à des fins d'optimisation.
Publiez l'instruction SQL et ajoutez un index !
Il n'y a aucun changement dans l'efficacité d'exécution de ces deux méthodes. PHP assemble simplement les instructions SQL. Vous devriez trouver un moyen d'optimiser à partir de la base de données ou des instructions SQL ;