我目前正在进行一些mysql查询的项目。项目中的所有mysql查询都是由其他开发人员完成的。不管怎么说,我跟他已经做了以下的查询有点混乱:如何提高这个mysql查询处理的速度
SELECT MIN(s_date) AS s_date,
client_id
FROM tb1
WHERE flag = 1
AND client_id NOT IN (
SELECT DISTINCT client_id
FROM tb1
WHERE flag = 0
)
GROUP BY client_id;
查询的第一部分,如果标志= 1,第二部分是检查不检查是(标志= 0)。我认为这是多余的,因为旗= 1,它不能是0.我不明白该查询的逻辑。而且我认为NOT IN有点慢(我的数据库需要2秒)。
请解释一下这个查询意味着什么,以及如何简化和改进它。
使用EXPLAIN另一种创造性的选择查看你的查询使用了什么索引,然后考虑调整你的索引 – 2014-10-07 16:16:14
你也可能发现使用JOIN查询比使用子查询更有效 – 2014-10-07 16:16:49
@Mihai在不知道tb1的实际结构的情况下,我不能说对于某些;但最常见的做法是将'id'作为主键,'client_id'将是一个外键 – 2014-10-07 16:19:36