mysql中连接表视图的sql索引优化

rryofs0p  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(201)

我在两个表上有一个联接查询:

表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上创建分区,但在性能方面没有太大帮助。

dwbf0jvd

dwbf0jvd1#

对于此查询:

SELECT t2.l, t1.m, t1.y, sum(t1.s)
FROM table1 t1 JOIN
     table2 t2
     ON t1.h = t2.h
WHERE t1.c = 405 AND t2.l in (500)
GROUP BY t2.l, t1.m, t1.y;

我建议两种索引策略。假设条件 t1 是最严格的,那就试试吧 table1(c, h, m, y, s) 以及 table2(h, l) .
如果t2限制性更强 table2(l, h) 以及 table1(h, c, m, y, s) .
注意,如果 JOIN 返回大量行。可能无法获得此查询的次秒性能。您可能需要使用带有触发器的摘要表来更新这些值。

相关问题