ich arbeite an einem Projekt und ich habe diese SQL-Abfrage erstellt, aber es scheint zu lange dauern, wenn ich einen größeren Zeitraum auswählen, irgendeine Idee, wie es schneller zu machen, versuchte ich mit union all
und seine viel schneller, aber die Daten ist nicht das gleiche, müssen mit dem Code helfen:mysql query dauert zu lang
SELECT SUM(ROUND(total, 2)) as Enero from (
SELECT
FORMAT (
COALESCE(
CONCAT(ROUND(pro.precio/1.14 , 2) + ROUND(p.recargo/1.14 , 2) + (SELECT SUM(ROUND(precio/1.14 , 2)) AS precio FROM acompanante_orden WHERE id_orden=p.id_orden) - p.descuento),
CONCAT(ROUND(pro.precio/1.14 , 2) + ROUND(p.recargo/1.14 , 2) - p.descuento)
)+ COALESCE(
ROUND(CONCAT(ROUND(pro.precio/1.14 , 2) + (SELECT SUM(ROUND(precio/1.14 , 2)) AS precio FROM acompanante_orden WHERE id_orden=p.id_orden) + ROUND(p.recargo/1.14 , 2) - p.descuento) * 0.14, 2),
ROUND(CONCAT(ROUND(pro.precio/1.14 , 2) + ROUND(p.recargo/1.14 , 2) - p.descuento) * 0.14, 2)
), 2) as total
FROM orden p
LEFT JOIN producto_orden AS pro ON p.id_orden = pro.id_orden
LEFT JOIN acompanante_orden AS pa ON p.id_orden = pa.id_orden
WHERE p.actual_date BETWEEN '2017-04-01' AND '2017-04-01' and p.status=4
) sum_1
UNION ALL IDEA
select ROUND((sum(precio)) * 1.14,2) as total from (
SELECT a.id_orden, ROUND(b.precio/1.14 , 2) + ROUND(a.recargo/1.14 , 2) - a.descuento as precio FROM orden a, producto_orden b WHERE a.id_orden=b.id_orden and a.actual_date BETWEEN '2017-04-01' AND '2017-04-01' and a.status=4 union all
SELECT c.id_orden, ROUND(d.precio/1.14 , 2) as precio FROM orden c, acompanante_orden d WHERE c.id_orden=d.id_orden and c.actual_date BETWEEN '2017-04-01' AND '2017-04-01' and c.status=4
) sum_1
UPDATE:
SO hier ist mein Tabellenschema: http://sqlfiddle.com/#!9/4fe12/2
, was ich brauche:
Ich brauche TOTAL der monatlichen SELLS zu bekommen, aber Werte auf DB sind mit STEUERN so, bevor ich total bekomme ich etwas Mathe tun müssen :
DB INFO
PRODUCT= $50.00
ADDONS= $8.00
SHIPPING= $6.00
DISCOUNT= $2.00
ERGEBNISSE I NEED:
PRODUCT= $50.00/1.14 = $43.86
ADDONS= $8.00/1.14 = $7.02
SHIPPING= $6.00/1.14 =$5.26
SUBTOTAL= $56.14 - DISCOUNT($2)= $54.14
SUBTOTAL= $54.14 * 1.14 = $61.72
Was sagt Ihnen EXPLAIN? Welche Indizes haben Sie an den beteiligten Tischen? Wie lange ist * zu lang *? Wenn Sie eine Unterauswahl für jede Spalte in jeder einzelnen Zeile und für mehrere Funktionsaufrufe vornehmen, wie erwarten Sie dann eine angemessene Leistung in Ihrer Abfrage? –
EXPLAIN: http://imgur.com/a/aQS72 INDEXEN: KEINE LANGE hängt vom Datumsbereich ab, wenn ich '2017-02-01' UND '2017-04-01' wähle, dauert es in UNION etwa 6 Sekunden ALL 1 sec .... und ja, ich weiß, dass es viele Funktionen erfüllt, deshalb frage ich, ob es bessere Möglichkeiten gibt, Ergebnisse zu erzielen. – Ered
Es ist schwierig, Ihnen zu sagen, ob es einen besseren Weg gibt oder nicht, weil Sie Ihre Tabellenschemas, Beispieldaten und die Ausgabe, die Sie erwarten, nicht von diesen Daten erhalten. Die Schemas sollten die Form CREATE TABLE DDL haben, damit jemand die Tabellen erstellen kann, wenn sie möchten, um eine Antwort zu finden. –