3 回答

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊
是的,總有改進(jìn)的余地。
從使用Eloquent Relationship而不是原始 mysql 開始。如果你打算使用 Laravel,那么請仔細(xì)閱讀文檔,沒有比這更容易的了。
其次,使用select()來盡量減少不必要的數(shù)據(jù)使用/消耗。優(yōu)化代碼是一項很好的技能。
正確使用數(shù)據(jù)類型。
A.Patente = '3452'
如果您的 Patente 是int類型,那么與string進(jìn)行比較將花費(fèi)更多的處理時間。而是做A.Patente = 3452
。將 int 與 int 進(jìn)行比較。
我相信當(dāng)您按照這些步驟操作時,您的查詢不會超過 1 秒。

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊
應(yīng)該注意的是,我做了刪除表的測試,例如我從 A 和 B 開始,它運(yùn)行良好,ABC 等。直到 F 開始出現(xiàn)緩慢的問題,我想這是因為我有太多的表和記錄審查,直到 Pablete 給了我這個選項并且它起作用了。
句子如下:
$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
LEFT JOIN `553` B ON B.Fraccion = A.Fraccion AND (A.SecuenciaFraccion = B.SecuenciaFraccion) AND (A.auditoria_id = B.auditoria_id) AND (A.Patente = B.Patente) AND (A.Pedimento = B.Pedimento) AND (A.SeccionAduanera = B.SeccionAduanera)
LEFT JOIN `554` C ON C.Fraccion = B.Fraccion AND (B.SecuenciaFraccion = C.SecuenciaFraccion) AND (B.auditoria_id = C.auditoria_id) AND (B.Patente = C.Patente) AND (B.Pedimento = C.Pedimento) AND (B.SeccionAduanera = C.SeccionAduanera)
LEFT JOIN `557` D ON D.Fraccion = A.Fraccion AND (A.SecuenciaFraccion = D.SecuenciaFraccion) AND (A.auditoria_id = D.auditoria_id) AND (A.Patente = D.Patente) AND (A.Pedimento = D.Pedimento) AND (A.SeccionAduanera = D.SeccionAduanera)
LEFT JOIN `556` E ON E.Fraccion = A.Fraccion AND (A.SecuenciaFraccion = E.SecuenciaFraccion) AND (A.auditoria_id = E.auditoria_id) AND (A.Patente = E.Patente) AND (A.Pedimento = E.Pedimento) AND (A.SeccionAduanera = E.SeccionAduanera)
LEFT JOIN `558` F ON F.Fraccion = A.Fraccion AND (A.SecuenciaFraccion = F.SecuenciaFraccion) AND (A.auditoria_id = F.auditoria_id) AND (A.Patente = F.Patente) AND (A.Pedimento = F.Pedimento) AND (A.SeccionAduanera = F.SeccionAduanera)
Where A.auditoria_id = 4
And A.Patente = '3452'
And A.Pedimento = '0000180'
And A.SeccionAduanera = '430'
");

TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
試試這個它可能有時間像你的 phpmyadmin
<?php
use DB;
$pdo = DB::connection()->getPdo();
$SQL = "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')
";
$stmt = $pdo->prepare($SQL);
$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
- 3 回答
- 0 關(guān)注
- 153 瀏覽
添加回答
舉報