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 回答