0

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

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)  

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

4

1 回答 1

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总共需要大约时间,而更复杂的示例需要大约 time S + M,加上插入所有内容的开销可能更多,并且S + M大于M.

于 2013-01-13T20:16:48.867 回答