2012-08-08 6 views
12

WHERE句で使用すると、サブクエリはMySQLによってキャッシュされますか?次の照会で

SELECT column_a, column_b FROM table_a WHERE 
    column_b IN (SELECT b_id FROM table_b) 

は、SQLパーサーによってキャッシュされたサブクエリSELECT b_id FROM table_bですか、(例えば、PHPで)、事前に問い合わせを行う変数として保存するために速くなり、その後、それらの値をCSV文字列として渡しますか?

SELECT column_a, column_b FROM table_a WHERE 
    column_b IN (1,3,4,6,8,10,16,18) 
+0

サブクエリで 'IN'を使うのはひどい考えです。クエリーは本質的に等結合であるため、ここでジョインしたい結果を得る方がよいでしょう。 'SELECT column_a、column_b FROM table_a JOIN table_b ON column_b = b_id' –

+0

@TimSeguine:なぜそれはひどい考えですか? 'table_b'がN:M関係テーブルである場合、' JOIN'が使用されている場合、 'table_a'から複数の行を取得します。これは望ましくないかもしれません。 – naitsirch

+1

@naitsirch MySQLは従属サブクエリのサポートが悪いので、悪い考えです。もしあなたが決してそれらを避けることができるなら、あなたはおそらくすべきです。よく選択された 'GROUP BY'は、ほとんどの時間外の結果を取り除きます。 –

答えて

6

EXPLAIN EXTENDEDを使用して、サブクエリに与える影響を十分に説明してください。

例えば

:彼らはあなたが望む結果キャッシュを得られない場合は

EXPLAIN EXTENDED 
SELECT column_a, column_b FROM table_a WHERE 
    column_b IN (SELECT b_id FROM table_b) 

すると、あなたがそれらを保存するに興味がある可能性がいずれかのメモリ(memcacheredis)で、ファイル上の(PHP file librariesを使用して)、または中SQLキャッシュ自体を分離する。

+11

これは私が今日見た中で最も間違った答えです。 –

+1

@ypercubeᵀᴹそしてそれをアップした人には、あなたが説明したり代替の答えを提供したりできますか? – Secret