2010-11-25 9 views
5
EXPLAIN SELECT node_id 
      FROM node 
     WHERE person_id IN (SELECT person_id 
           FROM user 
           WHERE is_locked = 0); 

MySqlの結果、サブクエリが導出されます。しかし、そうではありません!MySQLはサブクエリが派生していないと判断します。

(私はこれは簡単に登録しようとして再記述できます知っているが、私はMySQLは、これが依存サブクエリであると考えて理由を知りたい。)

+1

私はMySQLの専門家ではありませんが、ここではStackoverflow状態にあるいくつかの人が、この状況でMySQLがクエリオプティマイザに盲目的にいることを読んだことがあります。 –

+0

+1 MySQLは従属サブクエリを検出するのに本当に悪いので、それについて何もできません。 – AndreKR

+1

用語を理解するには、サブ選択が導出されます(結果の表は問合せから導出されますが、副問合せは従属としても知られています)。つまり、1行に1回ではなく1回だけ実行する必要があります。 – RedFilter

答えて

3

これは、MySQLのクエリオプティマイザのバグです。サブクエリ内のテーブルがメインクエリのテーブルと一致すると、明らかにそうであってはならない場合でも依存サブクエリとみなされ、簡単な修正はないようです。ごめんなさい;ジョインに行く。

+3

これは本当に残念です。なぜなら、実際にはMySQLの障害に過ぎないときに、このコンストラクトに本質的に何らかの不具合があると思うMySQL専用の(または主に)ユーザーがいるからです。 –

+1

私はちょうど、MySQLがバージョン5に到達することができるように、基本的で深刻なバグを残しています。 – Sean

関連する問題