我有这样的查询:
SELECT a.number, a.name, b.name1 FROM a,b
WHERE a.number NOT IN (SELECT number FROM c)
AND a.name = b.name1
此查询需要很长时间才能运行。我认为它是因为子查询。
在这种情况下是否可以避免使用子查询?
答案 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;