下面是我的查询,以获取 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 行?谢谢