0

我有很多查询,我知道应该返回 1 或 2 个结果。我应该明确限制它们还是让数据库完成他的工作?我的意思是我在 WHERE 使用唯一的键组合,或者当我可能多次获得相同的结果时,只需执行 LIMIT 1 而不是使用 DISTINCT ...

4

4 回答 4

5

如果您知道它们应该返回 1 或 2 行,那么添加LIMIT意味着如果它们返回超过 1 或 2 行,您就隐藏了一个问题。这相当于通过像这样包装代码来吞下异常:

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

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

于 2012-09-19T15:46:54.177 回答
1

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

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

于 2012-09-19T15:47:32.847 回答
1

我使用LIMIT有两个原因:

  1. 从更大的集合中返回已知数量的行(前 5 个用户,来自 X 个用户)
  2. 为了不让我DELETE记录比我预期的更多的记录 :) 而且,在这种情况下,我将 LIMIT 设置为比我预期的大一,因此它不会掩盖@RedFilter 描述的错误。
于 2012-09-19T15:49:10.367 回答
0

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

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

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

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

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

*我知道问题被标记为 MySQL

于 2012-09-19T15:57:51.590 回答