使用TOP,使用数据库中的ID获取数据时限制

时间:2013-12-27 07:21:57

标签: mysql sql sql-server

我在互联网上的某处读到,在您的查询中使用TOP(MSSQL)或LIMIT(MySQL)是最佳做法。

他解释说:如果数据库有数百万条记录,如果你使用限制,那么当数据库算法获得你在LIMITTOP中请求的记录时,它将停止过滤其他数据。

我的问题是,当您使用WHERE条件使用ID条件获取记录时,LIMITTOP确实会产生任何差异,因为它们将成为唯一ID数据库中。

  

PK适用于该列

SELECT TOP 1 * 
FROM TABLE_MASTER 
WHERE ID = 10` 

OR

SELECT * 
FROM TABLE_MASTER 
WHERE ID = 10 LIMIT 1`

如果已经问过这个问题,请给我链接,因为我无法找到stackoverflow线程。

2 个答案:

答案 0 :(得分:3)

如果您有WHERE子句通过唯一ID选择特定行,则查询已被限制。它将仅扫描与特定值匹配的单行。在这种情况下使用TOPLIMIT没有任何好处。

如果有人对你说,“功能X是最佳做法”并不意味着你应该使用功能X,即使它没有任何区别。

如果WHERE子句中没有条件,或者条件与大量行匹配,则使用TOPLIMIT非常有用。

可以限制行数,而不是返回您不需要的数千(甚至数百万)行

答案 1 :(得分:0)

如果ID不可能是唯一的,则可能会找到多条记录,如果您只期望一条记录,则没有LIMIT或TOP语句可能会弄乱您的代码。因此,为了以防万一,将LIMIT / TOP语句放在那里通常没有什么坏处。如果ID已经是一个独特的PK,它将不会对有效编码的数据库引擎(也就是所有这些)产生任何影响。