【发布时间】:2019-12-20 01:34:15
【问题描述】:
我有两个表(请求,结果)
请求: 电子邮件
结果: 电子邮件,已处理_at
我现在想获取所有具有相同电子邮件请求但尚未处理的结果:
SELECT * FROM results
INNER JOIN requests ON requests.email = results.email
AND results.processed_at IS NULL
我在每个单独的列上都有一个索引,但是查询很慢。所以我假设我需要一个多列的结果索引:
我只是不确定列的顺序:
ALTER TABLE results
ADD INDEX results_email_processed_at (email,processed_at)
ALGORITHM=INPLACE LOCK=NONE;
或
ALTER TABLE results
ADD INDEX results_processed_at_email (processed_at,email)
ALGORITHM=INPLACE LOCK=NONE;
【问题讨论】:
-
每张表有多少行?你有什么索引?
-
作为一般规则,您首先将“访问”列放在索引中,然后是“过滤”列。在这种情况下,索引应该是
(email,processed_at)。 -
请求有约 6000 万,结果约 1.5 亿