MySQL を使用すると、次のようなクエリがいくつかあります。
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 0
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 1000
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 2000
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 3000
等々。重要な点は、結果セットをページ分割していることです。各オフセットは一度しか実行されないため、キャッシュしても意味がありません。ただし、最終的にはすべての結果を反復処理します。この状況でクエリキャッシュを汚染することは非常に心配です。
SQL_NO_CACHE を追加すると、MySQL は結果のキャッシュを停止します。特定の結果セットはそれぞれ 1 回しか使用されないため、これが最も効率的ですか? それとも、MySQL は結果セット全体を 1 回キャッシュし、各リクエストで制限とオフセットに基づいてサブセットをプルするほどスマートですか?
つまり、SQL_NO_CACHE を使用しない場合、上記の 4 つの SQL ステートメントの例では、1 つのクエリと 3 つのキャッシュされた応答が生成されるのでしょうか? それとも 4 つの個別のキャッシュされないクエリが生成されるのでしょうか?