laravel中的慢速查询
我有一个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中 第一个查询速度慢,导致等待时间长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
有没有办法通过更快的查询来更改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上有索引吗?布欧纳血清!每个表中有多少行?不会对查询速度有多大影响。