当我连接到Aurora MySQL时,我尝试以下SQL
SELECT date, eventid
FROM `vw_KissMetricsAnalytics`
where eventid IN ( LOTS_OF_NUMS )
只需1秒钟,但当我将SQL更改为
时SELECT *
FROM
(
SELECT date, eventid
FROM `vw_KissMetricsAnalytics`
where eventid IN ( LOTS_OF_NUMS )
) s;
这需要永远运行,不是他们应该是一样的吗?这会是可用内存的限制吗?提前谢谢。
答案 0 :(得分:2)
你会认为MySQL应该意识到外部查询不会对结果添加任何内容,优化器应该只考虑它。但它没有。
在您显示的FROM
子句中编写子查询会创建一个填充了子查询结果的临时表。
临时表必须转换为行,存储在某处(取决于内存或磁盘上的行数),然后外部查询读取该临时表以提供最终结果。
这会给整个操作增加很多开销,并减慢你的工作。