Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
laravel中的慢速查询_Laravel_Eloquent - Fatal编程技术网

laravel中的慢速查询

laravel中的慢速查询,laravel,eloquent,Laravel,Eloquent,我有一个laravel应用程序,但执行查询需要很多时间 我试图构建一个原始查询,但没有成功 查询如下: $utente=utente::with'coll'->with'collaboratori' ->其中'id','0' ->其中有'coll',函数$query使用$id\u utete,$att\u dummy{ $query->where'collaboratori_id','like',$id_utete;} ->orderBy'created_at' ->得到; 我还尝试使用quer

我有一个laravel应用程序,但执行查询需要很多时间

我试图构建一个原始查询,但没有成功

查询如下:

$utente=utente::with'coll'->with'collaboratori' ->其中'id','0' ->其中有'coll',函数$query使用$id\u utete,$att\u dummy{ $query->where'collaboratori_id','like',$id_utete;} ->orderBy'created_at' ->得到; 我还尝试使用queryLog查看sql查询,laravel执行了不同的查询:

从'utenti_nuovo'中选择*其中'id'0且存在从'collaboratori_utenti'中选择*其中'utenti_nuovo`.'id`='collaboratori_utenti`.'id_utente` 和'collaboratori_id'类似100008订单,由'created_在'asc' 在718、834、844、848、875、890、894、895、897、898中的“collaboratori”和“collaboratori”中选择* 从'collaboratori'中选择*,其中'collaboratori'。'id'位于12,13,16中 选择“collaboratori”.*,“collaboratori_-utenti”.“id_-utente”作为“pivot_-id_-utente”.“collaboratori_-utenti”.“collaboratori_-id”作为“pivot_-collaboratori_-id”, `collaboratori_-utenti`.`attivita`作为`pivot_-attivita`、`collaboratori_-utenti`.`创建于`pivot_-created_-at`、`collaboratori_-utenti`.`更新于`pivot_-updated_-at` 从“collaboratori”中的“collaboratori”内部联接“collaboratori”至“collaboratori”.“id”=“collaboratori”至“collaboratori” 其中'collaboratori_utenti'。'id_utente'位于718、834、844、848、875、890、894、895、897、898中 第一个查询速度慢,导致等待时间长


有没有办法通过更快的查询来更改EXIST?

只选择您需要的字段。这将减少加载时间。

为了优化查询时间,您可以使用。使用->光标而不是->获取结束查询,如下所示:

$utente = Utente::with('coll')->with('collaboratori')
    ->where('id', '<>', '0')
    ->whereHas('coll', function ($query) use($id_utente, $att_dummy){
        $query->where('collaboratori_id', 'like', $id_utente);})
    ->orderBy('created_at')
    ->cursor();
100000条记录:

+-------------+-----------+------------+
|             | Time(sec) | Memory(MB) |
+-------------+-----------+------------+
| get()       |      0.17 |         22 |
| chunk(100)  |      0.38 |         10 |
| chunk(1000) |      0.17 |         12 |
| cursor()    |      0.16 |         14 |
+-------------+-----------+------------+
+--------------+------------+------------+
|              | Time(sec)  | Memory(MB) |
+--------------+------------+------------+
| get()        |        0.8 |     132    |
| chunk(100)   |       19.9 |      10    |
| chunk(1000)  |        2.3 |      12    |
| chunk(10000) |        1.1 |      34    |
| cursor()     |        0.5 |      45    |
+--------------+------------+------------+

我认为使用连接会更有效…尝试将“'like',$id_-utete`更改为“'=”,$id_-utete`为什么要使用like而不是=?使用like可以避免mysql使用索引。另外,您的colaboratori_id上有索引吗?布欧纳血清!每个表中有多少行?不会对查询速度有多大影响。