Maison  >  Questions et réponses  >  le corps du texte

php - 比较年份,用substr截取前4位快,还是date('Y')快?

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' ";
    }
滿天的星座滿天的星座2737 Il y a quelques jours804

répondre à tous(6)je répondrai

  • 给我你的怀抱

    给我你的怀抱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

    répondre
    0
  • 巴扎黑

    巴扎黑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.

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你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

    répondre
    0
  • 阿神

    阿神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.

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:11:05

    Publiez l'instruction SQL et ajoutez un index !

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再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 ;

    répondre
    0
  • Annulerrépondre