1

私はこのクエリを持っています:

SELECT a.id, b.discount FROM (a LEFT JOIN b ON b.id_a = a.id);

このクエリのEXPLAINコマンドは次のとおりです。

id  select_type   table  type   possible_keys   key       key_len  ref    rows   Extra
1    SIMPLE        a      index  NULL            PRIMARY   4        NULL   1489   Using index
1    SIMPLE        b      ALL    NULL            NULL      NULL     NULL   819   

Aは1489行のテーブルで、BはSQLビューです。これで、MySQLは1489 * 819の操作を実行する必要があることを理解しました。これは、あまりにも最適化されていない操作です。Bがテーブルの場合、列id_aのインデックスを作成しますが、SQLビューをどうするかわかりません。

誰でも助けることができますか?

4

3 に答える 3

2

私はビューを見て、あなたが見つけたい要素が存在するかどうかを修飾する生のテーブルに行くことを試みます。また、「b」ビューのルートテーブルにそのキーのインデックスがあることを確認してください。

于 2011-02-15T14:08:50.587 に答える
0

テーブルとビューを切り替えると役立つ場合があります。

例:

SELECT a.id, b.discount FROM (b RIGHT JOIN a ON b.id_a = a.id);
于 2011-02-15T14:33:31.493 に答える
0

ビュー(インデックス付けされていない)を操作する代わりに、インデックスを使用して一時テーブルを作成することもできます。いくつかの長いレポートクエリに対してこれを行い、結果としていくつかの印象的な速度の向上が得られました(もちろんYMMV)。

于 2011-02-15T14:12:45.473 に答える