当我指定选择前10行时,是否有任何方法阻止MySQL读取整个表?

当我指定选择前10行时,是否有任何方法阻止MySQL读取整个表?,mysql,sql,database,Mysql,Sql,Database,我在MYSQL Table1数据库中有一个包含200万条记录的表,我会预约并只返回前10条记录 然后下一个想法:从表1中选择限制10;,它只返回10条记录 当我运行EXPLAIN时,从表1中选择限制10;表中出现的报告或200万条记录只返回10条 如何防止SQL查询MYSQL读取整个表?如果您没有分组或排序操作,SQL引擎将按找到行的顺序返回行,因此限制10将使它不必费心查看前10行 如果索引适当,这也适用于有序的、可能是分组的查询-引擎可以查找顶级值、获取该行、查找下一个最佳值、获取该行,等等

我在MYSQL Table1数据库中有一个包含200万条记录的表,我会预约并只返回前10条记录

然后下一个想法:从表1中选择限制10;,它只返回10条记录

当我运行EXPLAIN时,从表1中选择限制10;表中出现的报告或200万条记录只返回10条


如何防止SQL查询MYSQL读取整个表?

如果您没有分组或排序操作,SQL引擎将按找到行的顺序返回行,因此限制10将使它不必费心查看前10行

如果索引适当,这也适用于有序的、可能是分组的查询-引擎可以查找顶级值、获取该行、查找下一个最佳值、获取该行,等等。。。直到它达到行限制并停止


如果您感到好奇,请比较带/不带限制的执行速度。请确保丢弃结果,以及带/不带ORDER BY。

如果您没有分组或排序操作,SQL引擎将按照找到行的顺序返回行,因此限制10将使它不必费心查看前10行

如果索引适当,这也适用于有序的、可能是分组的查询-引擎可以查找顶级值、获取该行、查找下一个最佳值、获取该行,等等。。。直到它达到行限制并停止


如果您感到好奇,请比较带/不带限制的的执行速度。请确保放弃结果,以及带/不带ORDER BY的结果。

EXPLAIN在估计行数时不遵守LIMIT子句。请在此处查找更多详细信息:

解释在估计行数时不遵守LIMIT子句。请在此处查找更多详细信息:

如果您有这样一个简单的查询,例如no order by或group by,或者其他一些构造,那么MySQL将返回它遇到的前十条记录,并且永远不会读取其余的记录。如果您有这样一个简单的查询,例如no order by或group by,或者其他一些构造,然后MySQL将返回它遇到的前十条记录,而不会去读取其余的记录。我已经在使用LIMIT,但在EXPLAIN命令中报告了pecorreu整个表。我已经在使用LIMIT,但在EXPLAIN命令中报告了pecorreu整个表。