避免子查询

时间:2015-05-08 08:05:42

标签: mysql sql

我有这样的查询:

SELECT a.number, a.name, b.name1 FROM a,b 
WHERE a.number NOT IN (SELECT number FROM c) 
AND a.name = b.name1

此查询需要很长时间才能运行。我认为它是因为子查询

在这种情况下是否可以避免使用子查询?

2 个答案:

答案 0 :(得分:0)

尝试使用join:

SELECT a.number, a.name, b.name1 
FROM a join b on a.name = b.name1
left join c on a.number = c.number
WHERE c.number is null

答案 1 :(得分:0)

您可以使用此代码作为获取结果的替代方法。

SELECT a.number, a.name, b.name1 
FROM a
JOIN b ON  a.name = b.name1
LEFT JOIN c ON a.number = c.number
WHERE c.number is NULL;

但是,您必须检查以确保在表上有正确定义的索引,除非查询将在每次执行时执行全表扫描。当表中的数据很小时,这将不会引起注意,随着表的增长,它将开始变慢。

您可以对查询进行说明以检查其执行计划,并进行相应的优化。

EXPLAIN SELECT a.number, a.name, b.name1 
FROM a
JOIN b ON  a.name = b.name1
LEFT JOIN c ON a.number = c.number
WHERE c.number is NULL;