0

4Gb テーブルがあり、別のテーブルで左結合を使用してそのテーブルから行を選択しようとすると、ディスク上に非常に大きな一時テーブルが作成されます。私のSQLは次のとおりです。

 select * 
   from ads 
   left join theme 
     ON ads.theme_id = theme.id 
  ORDER BY ads.id DESC 
  limit 1

テーブルadsには 4Gb のデータがありますが、テーブルthemeは非常に小さいです。このクエリを説明しようとすると、mysql は一時テーブルが作成されることを示しませんが、作成されます。そして、SQLを使用すると

SELECT * 
  from ads, 
       theme 
 where ads.theme_id = theme.id 
 ORDER BY ads.id DESC 
 LIMIT 1

mysql は非常に高速に実行されますが、このクエリには mysql による同じ説明があります。

私はinnodbエンジンを使用しており、プライマリ インデックスしかありません。

4

1 に答える 1

2

に索引を追加しますads.theme_id。それ以外の場合は、テーブル全体をスキャンして、adsこの列を に対してチェックする必要がありますtheme.id

于 2013-09-02T11:11:36.800 に答える