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

Log*_*man 81 mysql optimization limit

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

Era*_*rin 74

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

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

  • 出于抗议目的,您可能需要考虑发送LIMIT 2,然后如果您的单行假设不成立则进行投诉或轰炸. (29认同)
  • @JeffreyHantin如果假设只有一个是正确的,那么不会添加LIMIT 2来杀死任何优化,因为它会搜索所有行吗?在这种情况下添加LIMIT 2并不比添加任何内容更好(优化方面). (8认同)
  • @JeffreyHantin如果真的只有一个,你应该更喜欢为数据库添加一个唯一约束.更干净,然后通过健全性检查搞乱您的代码. (6认同)

rja*_*lor 19

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

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

查看此页面了解更多细节:MySQL文档:LIMIT优化


Max*_*nna 7

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

  • 这个答案具有误导性,因为它没有在其他答案(7 年前!)的评论中看到的警告,如果数据库知道只有一条记录可能匹配(例如查询唯一列),那么限制 1 将无效。 (2认同)

Kri*_*son 5

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

  • 如果没有唯一/主键,则即使有一行也应该更快,因为它在找到第一个匹配项后便停止搜索 (2认同)