将查询限制为一条记录可以提高性能

Re0*_*ess 30 mysql sql database

将查询限制为一个结果记录,如果表只有一个匹配结果,可以提高大型(ish)MySQL表的性能吗?

例如

 select * from people where name = "Re0sless" limit 1
Run Code Online (Sandbox Code Playgroud)

如果只有一个具有该名称的记录?如果name主键/设置为唯一的呢?是否值得更新查询或增益是否最小?

Joh*_*hat 41

如果列有

一个独特的指数:不,它不会更快

非唯一索引:也许,因为它会阻止发送任何其他行以外第一个匹配的,如果有的话

没有索引:有时候

  • 如果1个或多个行匹配查询,没错,因为全表扫描,将暂停后的第一行是匹配的.
  • 如果没有相匹配的行查询,没有,因为它需要完成全表扫描

  • 根据我的理解,这里重要的是添加限制可能会使您的查询更快,但不会让它变慢.如果没有别的,它还可以明确地向未来的开发人员发送您的意图,以防他们必须调试您的条件不像您想象的那样独特的情况.我养成了每当我只有一个结果时总是添加限制子句的习惯.只是浪费了脑力来弄清楚预先存在的索引是否已经为你完成了. (5认同)
  • 它会阻止全表扫描,还是会导致全表扫描提前停止?如果记录不存在,它仍然需要进行完整的全表扫描. (3认同)
  • 你是对的.应该说它"可以"阻止全表扫描.我会调整帖子 (3认同)