我什么时候可以限制SQL?

时间:2012-09-19 15:44:33

标签: mysql sql performance

我有很多查询,我知道应该返回1或2个结果。我应该明确限制他们还是让DB完成他的工作? 我的意思是我正在使用一个独特的键组合,或者当我可能多次使用相同的结果时,只需要使用LIMIT 1而不是使用DISTINCT ......

4 个答案:

答案 0 :(得分:5)

如果您知道他们应该返回1或2行,那么添加LIMIT意味着如果他们返回超过1行或2行,则会隐藏问题。这相当于通过包装代码来吞咽异常:

try{
    //some code
} 
catch{
    //do nothing
}

所以,在这种情况下我不会使用LIMIT。相反,当发生这种情况时,我会在应用程序层中抛出错误(或记录它等)。

答案 1 :(得分:1)

如果查询返回的结果数超过该数量并且知道这对应用程序很重要是错误的,那么如果结果多于预期,则需要抛出异常。

与此相关,具有无限制查询可能对应用程序和SQL数据库的性能有害 - 如果预期只有1或2个值的结果集最终会有数千个,那么您可能会遇到麻烦。 / p>

答案 2 :(得分:1)

我使用LIMIT有两个原因:

  1. 从较大的集合(前5位用户,来自X用户)返回已知数量的行
  2. 让我远离{{1}更多的记录而不是我期望的:)并且,在这种情况下,我将LIMIT设置为比我预期的更大,因此它不会掩盖@的错误RedFilter描述。

答案 3 :(得分:0)

一般来说,您希望限制访问的行数,因为较小的结果集运行得更快。

摘自SQL Server的*查询性能调优:

  

查询应该请求相对较少的行。例如,即使搜索标准返回了数千个匹配的文章,Web上的搜索引擎也一次返回有限数量的文章。如果查询请求大量行,则查找的开销成本增加会使索引不太适合。

或者,您可以创建高度选择性的标准:

  

具有高选择性的过滤条件限制从表到小结果集的行数,并帮助优化程序保持较低的查询成本。

* 我知道问题被标记为MySQL