Maison > Questions et réponses > le corps du texte
1问题描述:根据始末日期查询数据,由于数据库数据量大,用between and很慢,就添加了year,month,day字段,在比较年月日的时候有substr和date两种方法,两种都尝试过每次加载时间都在变化,也没找到相关的技术文章。理论上是两种速度都差不多,还是有相对快的方法?感谢每一个答题者。
2.相关代码片段:
//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 .= " and L.month = ".substr($startTime,4,2);
if(date('Ynd',strtotime($startTime)) == date('Ynd',strtotime($endTime))){
$str .= " and day = ".date('d',strtotime($startTime));
}else{
$str .= " and log_date between '$startTime' and '$endTime' ";
}
}else{
$str .= " and log_date between '$startTime' and '$endTime' ";
}
}else{
$str .= " L.log_date between $startTime and $endTime";
}
//date
if(date('Y',strtotime($startTime)) == date('Y',strtotime($endTime))){
$str = " where year = ".date('Y',strtotime($startTime));
if(date('Yn',strtotime($startTime)) == date('Yn',strtotime($endTime))){
$str .= " and month = ".date('n',strtotime($startTime));
if(date('Ynd',strtotime($startTime)) == date('Ynd',strtotime($endTime))){
$str .= " and day = ".date('d',strtotime($startTime));
}else{
$str .= " and log_date between '$startTime' and '$endTime' ";
}
}else{
$str .= " and log_date between '$startTime' and '$endTime' ";
}
}else{
$str = " where log_date between '$startTime' and '$endTime' ";
}
给我你的怀抱2017-05-16 13:11:05
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
巴扎黑2017-05-16 13:11:05
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.
我想大声告诉你2017-05-16 13:11:05
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
阿神2017-05-16 13:11:05
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.
过去多啦不再A梦2017-05-16 13:11:05
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 ;