我在两个表上有一个联接查询:
表1架构
| k | m | y | s | c | h |
表2架构
| k | l | h |
这是我的mysql查询:
SELECT l,m,y,sum(s)
FROM table1 t1
JOIN table2 t2
on t1.h=t2.h
WHERE t1.c = 405
AND t2.l in (500)
GROUP BY m,y,l;
表1有超过1.3亿行,表2有100万行。我在两个表上创建了如下索引:
CREATE INDEX idx_temp1 ON table1(h,c);
CREATE INDEX idx_temp2 ON table2(h,l);
查询仍需花费大量时间(超过10分钟)。我的用例希望查询在一秒钟内执行。请告诉我,如果有任何优化,可以做的查询。
ps:我也尝试过在c上创建分区,但在性能方面没有太大帮助。
1条答案
按热度按时间dwbf0jvd1#
对于此查询:
我建议两种索引策略。假设条件
t1
是最严格的,那就试试吧table1(c, h, m, y, s)
以及table2(h, l)
.如果t2限制性更强
table2(l, h)
以及table1(h, c, m, y, s)
.注意,如果
JOIN
返回大量行。可能无法获得此查询的次秒性能。您可能需要使用带有触发器的摘要表来更新这些值。