0

2 つの異なるタイプのクエリを作成できます。

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)  

しかし、2 番目の例は非常に高速です。
速くなる理由は何ですか?

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では合計で約 時間かかりますが、より複雑な例では約 時間かかりS + M、さらにすべてを接続するためのオーバーヘッドが少し多くなり、S + Mより大きくなりMます。

于 2013-01-13T20:16:48.867 に答える