sql >> データベース >  >> RDS >> Mysql

派生テーブルでインデックスを使用するようにMySQLオプティマイザーに指示するにはどうすればよいですか?

    MySQL Server 5.6には、これに対する解決策があります-プレビューリリース(この記事の執筆時点)。

    http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

    ただし、MySQL Optimizerが「派生テーブルにインデックスを追加する」ときに、既存のインデックスを再利用するかどうかはわかりません。

    次のクエリについて考えてみます。

    SELECT * FROM t1JOIN(SELECT * FROM t2)AS Delivered_t2 ON t1.f1 =defined_t2.f1;

    ドキュメントには次のように書かれています。「オプティマイザーは、derived_t2から列f1にインデックスを作成します。そうすることで、最低コストの実行プランでrefアクセスを使用できるようになります。」

    OK、それは素晴らしいことですが、オプティマイザーはt2からのインデックスを再利用しますか?つまり、t2.f1にインデックスが存在する場合はどうなるでしょうか。このインデックスは再利用されますか、それともオプティマイザは派生テーブルに対してこのインデックスを再作成しますか?誰が知っていますか?

    編集: MySQL 5.6までの最善の解決策は、一時テーブルを作成し、そのテーブルにインデックスを作成してから、一時テーブルでSELECTクエリを実行することです。



    1. FROM_UNIXTIMEからの負の値の変換

    2. クライアントをMySQLサーバーに正常に接続する

    3. 2つのフィールドの値が同じであるレコードの作成を防ぐにはどうすればよいですか?

    4. SQLite Listview onclickは、dbをフィルターして開き、新しいアクティビティを生成します