【发布时间】:2016-12-15 00:57:55
【问题描述】:
我在 mySQL 服务器上运行更新查询/子查询,需要 12 分钟才能完成,我认为优化不够。
有人可以考虑优化它,让它运行得更快吗?
提前致谢。
UPDATE `TABLE_1` C
INNER JOIN(
SELECT Cust_No,
#current year sales
(SELECT SUM(`Sales`)
FROM `TABLE_2`
WHERE Year = 2016
AND Cust_No = p.Cust_No
) as CY_TOTAL_SALES,
# Get previou year sales
(SELECT SUM(`Sales`)
FROM `TABLE_2`
WHERE Year = 2015
AND Cust_No = p.Cust_No
) as PY_TOTAL_SALES
FROM `TABLE_2` p
WHERE Year >= 2015
AND Year <= 2016
) AS A ON C.`customer_number` = A.Cust_No
SET C.CY_TOTAL_SALES = A.CY_TOTAL_SALES,
C.PY_TOTAL_SALES = A.PY_TOTAL_SALES;
TABLE_1 包含 28,000 条记录(customer_number 字段是唯一的并且已建立索引)
TABLE_2 包含 250,000 条记录(Cust_No 不是唯一的,但已建立索引)
它的作用是通过加入 Table_2 来更新 TABLE_1,并使用子查询在 TABLE_2 中总结两年的总销售额,然后将值更新回 TABLE_1,其中 TABLE_1 客户编号与 TABLE_2 Cust_no 匹配。
【问题讨论】:
-
使用
EXPLAIN运行查询并发布输出。这将显示查询的哪一部分是昂贵的。