【发布时间】:2020-05-23 23:27:51
【问题描述】:
我有一个涉及 6 个表的 sql 语句,在 laravel 中执行它需要 26 秒,但在 phpmyadmin 中执行相同的 sql 语句大约需要 0.0075 到 0.0089 秒。
这是我在 laravel 中的代码:
use DB;
$partidas = DB::select("SELECT A.Patente, A.Pedimento, A.SeccionAduanera, A.Fraccion, A.SecuenciaFraccion, A.ValorComercial, A.PrecioUnitario, A.CantidadUMComercial, A.UnidadMedidaComercial, A.CantidadUMTarifa, A.UnidadMedidaTarifa, A.MetodoValorizacion, A.PaisOrigenDestino, A.PaisCompradorVendedor,
B.ClavePermiso, B.NumeroPermiso,
C.ClaveCaso, C.IdentificadorCaso, C.ComplementoCaso,
D.ClaveContribucion, D.FormaPago, D.ImportePago,
E.TasaContribucion, E.TipoTasa,
F.Observaciones
FROM `551` A
INNER JOIN `553` B ON B.Fraccion = A.Fraccion
AND (A.SecuenciaFraccion = B.SecuenciaFraccion)
AND (A.auditoria_id = 4 AND B.auditoria_id = 4)
AND (A.Patente = '3452' AND B.Patente = '3452')
AND (A.Pedimento = '0000180' AND B.Pedimento = '0000180')
AND (A.SeccionAduanera = '430' AND B.SeccionAduanera = '430')
INNER JOIN `554` C ON C.Fraccion = A.Fraccion
AND (A.SecuenciaFraccion = C.SecuenciaFraccion)
AND (A.auditoria_id = 4 AND C.auditoria_id = 4)
AND (A.Patente = '3452' AND C.Patente = '3452')
AND (A.Pedimento = '0000180' AND C.Pedimento = '0000180')
AND (A.SeccionAduanera = '430' AND C.SeccionAduanera = '430')
INNER JOIN `557` D ON D.Fraccion = A.Fraccion
AND (A.SecuenciaFraccion = D.SecuenciaFraccion)
AND (A.auditoria_id = 4 AND D.auditoria_id = 4)
AND (A.Patente = '3452' AND D.Patente = '3452')
AND (A.Pedimento = '0000180' AND D.Pedimento = '0000180')
AND (A.SeccionAduanera = '430' AND D.SeccionAduanera = '430')
INNER JOIN `556` E ON E.Fraccion = A.Fraccion
AND (A.SecuenciaFraccion = E.SecuenciaFraccion)
AND (A.auditoria_id = 4 AND E.auditoria_id = 4)
AND (A.Patente = '3452' AND E.Patente = '3452')
AND (A.Pedimento = '0000180' AND E.Pedimento = '0000180')
AND (A.SeccionAduanera = '430' AND E.SeccionAduanera = '430')
INNER JOIN `558` F ON F.Fraccion = A.Fraccion
AND (A.SecuenciaFraccion = F.SecuenciaFraccion)
AND (A.auditoria_id = 4 AND F.auditoria_id = 4)
AND (A.Patente = '3452' AND F.Patente = '3452')
AND (A.Pedimento = '0000180' AND F.Pedimento = '0000180')
AND (A.SeccionAduanera = '430' AND F.SeccionAduanera = '430')
");
dd($partidas);
我需要知道我是否可以用 eloquent 或其他方式发表声明以在 laravel 中获得更好的性能。
谢谢!
PD:英语不是我的母语,如有错误请见谅!
【问题讨论】:
-
当您构建一个名为 551 的表时,发生了根本性的错误
-
你能解释一下为什么你有相同的数据库来搜索相同的数据。
-
海关审核程序。海关发送文件(因此名称为 551、553 等)。并且在每个文件中都有特定的信息,在 551 个产品、553 个保险、554 个卖家等中。为了审计它,客户需要连接不同表中的某些数据。我在语句中输入的字段是连接表的字段。
-
您的 PHP 代码是远程的还是与数据库位于同一服务器中?我这么说是因为phpMyAdmin可能在同一个服务器,如果查询完全一样,可能是你的连接太慢了。
-
他们在同一个服务器(本地主机)