为什么mysql(不在)比没有子查询更快?

时间:2013-01-13 20:05:11

标签: mysql

我可以用两种不同的类型编写查询:

SELECT * 
FROM `pictures` 
WHERE `field_id` NOT IN (SELECT `field_id` 
                         FROM `table` 
                         WHERE `confirm` = 0)  

SELECT * 
FROM `pictures` 
WHERE `field_id` NOT IN (12,56,435,44,25,52,876,99)  

但第二个例子非常快! 更快的原因是什么?

1 个答案:

答案 0 :(得分:2)

这是一个很好的表现法则:减少工作时间会花费更少的时间。

在更简单的示例中,MySQL引擎正好执行1个查询:

-- Execute the main query (takes time M)
SELECT * 
FROM `pictures` 
WHERE `field_id` NOT IN (12,56,435,44,25,52,876,99)  

在更复杂的示例中,MySQL引擎执行2个查询:

-- Execute the subquery (takes time S)
SELECT `field_id` FROM `table` WHERE `confirm` = 0;
-- => (12,56,435,44,25,52,876,99)

-- Plug the subquery results into the main query (takes time M)
SELECT * 
FROM `pictures` 
WHERE `field_id` NOT IN (12,56,435,44,25,52,876,99);

更简单的示例总共花费时间M,而更复杂的示例需要时间S + M,加上插入所有内容可能需要更多开销,S + M大于M

相关问题