如果我做了如下命令:
SELECT TOP(10000) ProductId from ProductInfo WHERE ProductId IN
(
SELECT ProductId from DeletedProduct
)
它会扫描整个表格,还是在找到10000后立即爆发?
答案 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条记录所需的页面)