在您知道只有1个结果时,向MySQL查询添加“LIMIT 1”会使它们更快吗?

问题描述 投票:78回答:5

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

mysql optimization limit
5个回答
72
投票

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

对于优化查询(使用小表上的索引),它可能在性能上没有太大影响,但是再次 - 如果您只对一行感兴趣而不是添加LIMIT子句。


18
投票

限制可以影响查询的性能(请参阅注释和下面的链接),它还会减少MySQL输出的结果集。对于您期望单个结果的查询,可以获益。

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

查看此页面了解更多详情:MySQL Documentation: LIMIT Optimization


4
投票

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


3
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.