SELECT TOP扫描整个表格

时间:2010-07-29 13:08:44

标签: sql sql-server

如果我做了如下命令:

SELECT TOP(10000) ProductId from ProductInfo WHERE ProductId IN
(
    SELECT ProductId from DeletedProduct
)

它会扫描整个表格,还是在找到10000后立即爆发?

4 个答案:

答案 0 :(得分:2)

一旦找到10000就会爆发。

您没有使用我的DELETE解决方案吗? : - )

答案 1 :(得分:1)

我认为如果您进行内部联接,您的查询会更快,如下所示:

SELECT TOP(10000) P.ProductId
FROM ProductInfo P INNER JOIN DeletedProduct D on P.ProductId=D.ProductId

答案 2 :(得分:1)

如果您只对ProductInfo中的ProductID(而不是其他列)感兴趣,并且仅使用IN来验证产品是否存在,那么这样的事情可能会更快。

在管理工作室中同时运行您的查询和以下查询表明您的成本为99%,而以下成本为1%(更快);然而,这可能只是因为我正在使用它的数据库。

SELECT TOP(10000) ProductId
FROM DeletedProduct D
WHERE EXISTS (SELECT * FROM ProductInfo P WHERE P.ProductID=D.ProductID )

答案 3 :(得分:0)

对于MSSQL,它肯定会对DeletedProduct进行索引或表扫描,因为您在那里选择所有记录。 猜测一下,它可能也会对ProductInfo进行索引扫描,除非有>>>其中有超过10 000条记录,除非聚集索引在ProductId上(但是,它只会读取填写10 000条记录所需的页面)