3

下面是我的查询,以获取 20 行的genre_id 1。

EXPLAIN SELECT * FROM (`content`) 
WHERE `genre_id` = '1' 
AND `category` = 1
LIMIT 20

我在内容表中共有 654 行,genre_id 为 1,我在genre_id 上有索引,在上面的查询中,我将结果限制为仅显示 20 条记录,这工作正常,但解释是在行下显示 654 条记录,我尝试在类别上添加索引但仍然是相同的结果,然后我也删除了 AND category = 1 但相同的行数:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  content ref genre_id    genre_id    4   const   654 Using where

在这里我找到了答案

估计行数时不考虑 LIMIT 即使你有限制检查行数的 LIMIT MySQL 仍然会打印完整的行数

但也在评论中发布了另一个回复:

现在在估计行数时会考虑 LIMIT。我不确定哪个版本解决了这个问题,但在 5.1.30 中,EXPLAIN 准确地考虑了 LIMIT。

我正在使用带有 InnoDB 的 MySQL 5.5.16。所以根据上面的评论,它仍然没有考虑到。所以我的问题是即使我设置了限制,mysql 是否会遍历所有 654 行来返回 20 行?谢谢

4

1 回答 1

2

MySQL的Rick James的回复

估计解释中的行数时是否考虑了mysql LIMIT?

不。(使用 JSON 的 5.7 可能是另一回事。)

于 2013-10-14T06:52:39.457 回答