DEV和生产环境MYSQL服务器之间的性能差异

时间:2018-11-20 07:09:26

标签: mysql laravel-5 phpmyadmin eloquent

我正在使用Laravel 5.6和VueJS构建一个应用程序,以从Laravel后端的API请求数据。在我的DEV环境中,查询根本不花时间,但是在生产环境中,API上的响应需要85.7秒,而在DEV环境中则为0.1秒。两种环境中的数据都相同。

使用我的Controller中的以下命令,我可以获得运行的确切查询,并且可以对它们进行逐一测试:

DB::enableQueryLog();

    // then my eloquent stuff
    $query = Sportevent::whereHas('photos')->with('photos');
    if($request->input('year')){
        $year = $request->input('year');
        $query = $query->where('date','like', $year.'%');
    }
    if($request->input('country')){
        $country = $request->input('country');
        $query = $query->where('country',$country);
     }
    $sportevents = $query->orderBy('date',"DESC")->paginate(10);

// then I display the queries:
dd(DB::getQueryLog());

以下是未选择年份或国家/地区而产生的查询,包括两种环境中随时间变化的表现:

// --------------------------------------------------------------
// DEV: 0.0208 seconds | PROD: 73 seconds (had to use stopwatch)
// --------------------------------------------------------------
select count(*) as aggregate from `events` where exists 
   (select * from `photos` where `events`.`id` = `photos`.`eventID` 
   and `active` = 1)

// ------------------------------------------
// DEV: 0.025 seconds | PROD: 38.9721 seconds
// ------------------------------------------
select * from `events` where exists (select * from `photos` where
  `events`.`id` = `photos`.`eventID` and `active` = 1) 
   order by `date` desc limit 10 offset 0

// ------------------------------------------
// DEV: 0.0112 seconds | PROD: 0.0141 seconds
// ------------------------------------------
select * from `photos` where `active` = 1 and `photos`.`eventID` in 
    (11194, 11087, 10506, 10797, 9910, 10118, 10212, 9655, 10047, 10049)

表事件包含约6000个条目和少于50000个条目的照片。如果您需要有关表结构的更多详细信息,请在评论部分进行投票之前让我知道:-)

在生产服务器上,还有许多其他的应用程序与Laravel或Wordpress一起运行,并且使用同一MySQL安装上的数据库,但它们都没有类似的问题。

1 个答案:

答案 0 :(得分:0)

尽管前两个查询输出不多,但它们必须处理最多的数据,因此似乎是占用大量内存和/或CPU的查询。

看来我的DEV环境比生产环境具有更多的功能,因此,我有很大的不同。

最后的解决方案很简单:我在列photos.eventID中添加了INDEX类型的INDEX,无论如何这都是个好主意。

这个小小的变化使我的API在0.4秒内响应,而不是85.7