【发布时间】:2018-05-04 12:24:38
【问题描述】:
在
SELECT a.film_id, a.description
from sakila.film a
inner join (
select film_id
from sakila.film b
order by title limit 50,5
) as lim
USING(film_id)
在第三行中,它显示它仍然扫描了所有 1000 行。
然后我测试了子查询select film_id from sakila.film b order by title limit 50,5,解释日志是这样的。
在我看来,第一个日志中的第三行应该和第二个日志一样,我不知道如何解释前2行 在第一个日志中,为什么行是 55 和 1,我想可能应该是 5 和 5。这是 MySQL 官方演示。我猜是因为mysql的版本。
我把我的mysql更新到8.0.11.0,像这样变得更正常了@
我测试了相同的数据集int mysql8.0和mysql5.6,在mysql5.6中检索数据只需要0.2s,但在mysql8.0中需要1s。他们有什么不同?和 第一行仍然是 905 而不是 5。谁能告诉我原因和为什么第一行是 905,第二行是 1?
【问题讨论】:
-
请出示解释计划。 MySQL 在加入子查询时并不是那么好。它倾向于为每个主行再次运行它。
-
我猜是因为mysql的版本。我在 5.7.2 和 5.5.0 上对其进行了测试。它有 3 种结果。