即时通讯工作的一个项目,我创造了这个SQL查询,但似乎太长了,如果我选择一个更大的日期范围,任何想法如何使它更快地服用,我tryed与union all
及其多快,但数据是不一样的,需要代码帮助:MySQL查询时间太长
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:
所以这里是我的表模式:http://sqlfiddle.com/#!9/4fe12/2
我需要什么:
我需要每月卖出TOTAL,但DB值与税等等之前,我总我需要做一些数学:
DB信息
PRODUCT= $50.00
ADDONS= $8.00
SHIPPING= $6.00
DISCOUNT= $2.00
结果我需要:
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
是什么EXPLAIN告诉你吗?你有什么指标涉及表格?多久*太长*?当你在每一行的每一列上进行子选择时,再加上多个函数调用,你如何期望在查询中获得任何体面的表现? –
说明:http://imgur.com/a/aQS72 指标:上的时间范围NONE LONG dependes如果我选择“2017年2月1日”与“2017年4月1日”它需要在UNION大约6秒所有1秒....是的,我知道它使得很多功能,这就是为什么林询问是否有更好的方法来达到结果。 – Ered
这很难告诉你是否有更好的方法还是不行,因为你已经不包含在您的表模式,样本数据,以及你期望从这些数据得到的输出。模式应该是CREATE TABLE DDL的形式,所以如果他们想要制定答案,有人可以创建表。 –