この最適化は、インデックスが設定されていないカラムと定数の直接比較の効率を向上させます。このような場合、条件は評価のためにストレージエンジンに
        「プッシュダウン」 されます。MySQL
        5.1 では、この最適化は
        NDBCLUSTER
        ストレージエンジンでのみ使用できますが、MySQL
        の今後のバージョンでほかのストレージエンジン向けにも実装する予定です。
      
MySQL Cluster では、この最適化により、一致しない行をクラスタのデータノードとクエリーを発行した MySQL サーバーの間でネットワーク経由で送る必要がなくなり、コンディションプッシュダウンを使用できる状態にあるが使用してない場合に比べて、クエリーの速度が 5 - 10 倍に向上します。
MySQL Cluster テーブルが次のように定義されていると仮定します。
CREATE TABLE t1 (
    a INT,
    b INT,
    KEY(a)
) ENGINE=NDBCLUSTER;
コンディションプッシュダウンは、このテーブルに対する次のようなクエリーで使用できます。
SELECT a,b FROM t1 WHERE b = 10;
        これは
        EXPLAIN
        SELECT の出力で見られます。
      
mysql> EXPLAIN SELECT a,b FROM t1 WHERE b = 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10
        Extra: Using where with pushed condition
ただし、コンディションプッシュダウンは下記の 2 つのクエリーと一緒には使用できません。
SELECT a,b FROM t1 WHERE a = 10; SELECT a,b FROM t1 WHERE b + 1 = 10;
        この 2
        つのクエリーのうち最初のものに関しては、インデックスが
        a
        カラムに存在するため、コンディションプッシュダウンは適用できません。(インデックスアクセスメソッドの方が効率的なので、コンディションプッシュダウンよりも優先して選択されます。)
        2
        番目のクエリーの場合、インデックスが設定されていないカラム
        b
        に関する比較は直接的でないため、コンディションプッシュダウンが適用できません。(ただし、b
        + 1 = 10 を WHERE
        節内で b = 9
        に減らす場合はコンディションプッシュダウンを適用できます。)
      
        >
        または<
        演算子を使用してインデックスカラムを定数と比較する場合も、コンディションプッシュダウンを使用できます。
mysql> EXPLAIN SELECT a,b FROM t1 WHERE a<2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
         type: range
possible_keys: a
          key: a
      key_len: 5
          ref: NULL
         rows: 2
        Extra: Using where with pushed condition
コンディションプッシュダウンでサポートされているほかの比較は次のとおりです。
              column
              [NOT] LIKE pattern
              pattern
              は、照合するパターンを含んだ文字列リテラルでなければいけません。構文については、項7.4.1. 「文字列比較関数」を参照してください。
            
              column
              IS [NOT] NULL
              column
              IN (value_list)
              value_list
              の各項目は定数リテラル値でなければいけません。
            
              column
              BETWEEN constant1 AND
              constant2
              constant1 と
              constant2
              はそれぞれ、定数リテラル値でなければいけません。
            
上記のどの場合の条件も、カラムと定数の直接比較を 1 つ以上使用した形式に変換できます。
        コンディションプッシュダウン機能はデフォルトでは使用されません。有効にするには、mysqld
        を --engine-condition-pushdown
        オプションで起動するか、実行時に次のステートメントのいずれかを実行します。
SET engine_condition_pushdown=ON;
SET engine_condition_pushdown=1;
制限. コンディションプッシュダウンには次の制限があります。
                MySQL 5.1
                では、コンディションプッシュダウンは
                NDBCLUSTER
                ストレージエンジンでのみサポートされています。
              
カラムは定数とだけ比較できます。これには、評価結果が定数値になる式も含まれます。
                BLOB
                型や
                TEXT
                型のカラムは比較に使用できません。
              
カラムと比較する文字列値には、カラムと同じ照合を使用する必要があります。
                結合は直接にはサポートされていません。複数のテーブルを使用する条件は、可能な場合は個別にプッシュされます。どの条件が実際にプッシュダウンされるかを調べるには、EXPLAIN
                EXTENDED を使用します。
              

