我可以用两种不同的类型编写查询:
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)
但第二个例子非常快! 更快的原因是什么?
答案 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
。