【发布时间】:2018-05-07 06:41:44
【问题描述】:
我有 2 个表的连接查询:
table1 架构
| k | m | y | s | c | h |
table2 架构
| 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;
table1 有超过 1.3 亿行,table2 有 100 万行。我在这样的 2 个表上创建了索引:
CREATE INDEX idx_temp1 ON table1(h,c);
CREATE INDEX idx_temp2 ON table2(h,l);
查询仍然需要很长时间(超过 10 分钟)。我的用例希望查询在一秒钟内执行。请告诉我是否可以对查询进行任何优化。
PS:我也尝试在 c 上创建分区,但在性能方面没有太大帮助。
【问题讨论】:
-
为你的 SQL 添加解释计划。
-
你能提供一个表模式吗?
-
只需删除您创建的索引并创建两个新索引:在表 1 中的 c 列和表 2 中的 l 列上
-
@Jack 我已经添加了
-
@maxim 但它不会影响 'h' 上 2 个表的连接吗?
标签: mysql sql query-optimization