我想我明白了。
我最初的问题与“选择和限制”相关联,但实际上这适用于所有查询。
MySQL 提供“分析”关键字。
您可以在终端上调用它,然后执行您的查询;它将输出一些有关执行细节的元数据。
这是一个在我的问题中使用表格的示例(我将其名称更改为“comment”,并将其 PK 更改为“commentid”以提供一些上下文):
analyze
select * from comment order by commentid desc limit 1;
以下是输出:
“rows”告诉您查询迭代了多少行,“r_rows”是结果行。
这就是我一直在寻找的。
我的印象是“限制”关键字会以某种方式优化查询。没有。
另一方面,你也可以使用 MAX() 来获取最后一行
analyze
select * from comment where commentid=(select max(commentid) from comment);
主查询显然只迭代了 1 行,但子查询应该是两者中最复杂的选择,所以我对其进行了分析:
analyze
select max(commentid) from comment;
给了我:
这并没有告诉我太多,除了“额外的”描述,它说:“选择优化掉的表”。
我查了一下,已经是answered question on stack
从我目前收集到的信息来看,该描述意味着 MAX 实际上并不计算表的行数,而是使用由 sql 引擎管理的存储值。
它仅在列具有“auto_increment”时才有效。
接受的答案还说它只适用于 MyISAM 表,但我正在 InnoDB 表上运行这些测试,优化似乎正在发挥作用。
以下是详细信息:
SELECT PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_TYPE_VERSION, PLUGIN_LIBRARY, PLUGIN_LIBRARY_VERSION, PLUGIN_AUTHOR
FROM information_schema.PLUGINS
WHERE PLUGIN_NAME = 'innodb';
PS:您可能想知道是否这样做:
ALTER TABLE comment AUTO_INCREMENT = 999;
搞砸了优化。
答案是否定的,它不会,将 AUTO_INCREMENT 设置为某个值只会影响下一个条目。
自己试试,修改AUTO_INCREMENT值然后运行
select max(commentid) from comment;
你仍然会得到正确的值。