MySQL SELECT MAX vs ORDER BY LIMIT 1 on WHERE clause



SELECT MAX vs ORDER BY LIMIT 1这个问题在这里已经回答了好几次了,但是如果我添加一个WHERE子句,事情就会发生巨大的变化

这是我的表:

<表类> 字段类型 空 键 默认 的 tbody><<tr>idb 'int">'没有'"革命制度党">没有' auto_increment">"open_time">b 'bigint">'没有''大学'没有"

比较分析:

-> Index scan on table using PRIMARY (reverse)  (cost=0.10 rows=2) (actual time=0.036..0.036 rows=1 loops=1)

-> Index range scan on table using open_time  (cost=217786.76 rows=1081033) (actual time=0.031..705.926 rows=2180645 loops=1)

检查2行肯定比检查2,180,645行快得多。

ORDER BY id DESC LIMIT 1的查询中,它使用主键索引。从最后开始,因为顺序是相反的。然后,它只是向下迭代索引的叶节点(按降序),直到它检查第一行也匹配open_time > 0。然后,LIMIT优化允许查询执行完成。根据它的统计数据,它估计在检查了2行之后会发生这种情况。

对于MAX(id)的查询,使用open_time上的索引。但是因为它是一个范围条件open_time > 0,所以它不能假设在该范围的开始或结束处找到最大id。因此,它必须检查open_time索引中的每个匹配条目,搜索id的最大值(主键隐式地是二级索引的一部分)。不存在像LIMIT查询那样的提前终止的机会。

相关内容

  • 没有找到相关文章

最新更新