96

当我将 LIMIT 1 添加到 MySQL 查询时,它是在找到 1 个结果后停止搜索(从而使其更快)还是仍然获取所有结果并在最后截断?

4

5 回答 5

87

根据查询,添加限制子句会对性能产生巨大影响。如果您只想要一行(或者知道只有一行可以满足查询的事实),并且不确定内部优化器将如何执行它(例如,WHERE 子句未命中索引等),那么您绝对应该添加一个 LIMIT 子句。

至于优化查询(在小表上使用索引),它的性能可能并不重要,但同样 - 如果您只对一行感兴趣,而不是添加一个 LIMIT 子句。

于 2009-01-18T17:21:39.517 回答
22

限制会影响查询的性能(请参阅下面的评论和链接),它还会减少 MySQL 输出的结果集。对于您期望单个结果的查询,这是有好处的。

此外,限制结果集实际上可以加快总查询时间,因为传输大型结果集会占用内存并可能在磁盘上创建临时表。我提到这一点是因为我最近看到一个应用程序由于结果集巨大而没有使用限制杀死服务器,并且由于限制到位,资源利用率大大下降。

查看此页面以获取更多详细信息:MySQL 文档:限制优化

于 2009-01-18T17:22:05.257 回答
8

如果只有 1 个结果返回,那么不,LIMIT 不会使其更快。如果有很多结果,而您只需要第一个结果,并且没有 GROUP 或 ORDER by 语句,那么 LIMIT 会使其更快。

于 2009-01-18T17:24:14.300 回答
8

简而言之,答案是肯定的。如果您将结果限制为 1,那么即使您“期待”一个结果,查询也会更快,因为您的数据库不会查看所有记录。一旦找到与您的查询匹配的记录,它就会停止。

于 2016-09-28T15:34:26.200 回答
2

如果您真的只期望一个结果,那么将 LIMIT 附加到您的查询中确实很有意义。我不知道 MySQL 的内部工作原理,但我确信它不会收集 100'000+ 条记录的结果集,只是在最后将其截断回 1..

于 2009-01-18T17:18:02.707 回答