我可以使用此语句进行任何优化以获取已使用行的计数吗?

时间:2010-06-09 13:22:20

标签: sql

我是否可以使用此语句进行任何优化以获取已使用行的计数。

注意:ProductOrderInfo表中有超过4000万行。

SELECT @TotalUsed = COUNT(*)
FROM ProductInfo WITH (NOLOCK)
WHERE ProductInfoId IN 
(
    SELECT ProductInfoId FROM ProductOrderInfo WITH (NOLOCK)
);

3 个答案:

答案 0 :(得分:2)

使用JOIN进行此类查询:

SELECT @TotalUsed = COUNT(DISTINCT i.ProductInfoId) 
FROM ProductInfo i WITH (NOLOCK) 
JOIN ProductOrderInfo oi WITH (NOLOCK) 
    ON io.ProductInfoId = i.ProductInfoId

表格应该包含这些列的索引以便快速搜索。

答案 1 :(得分:1)

试试这个

SELECT @TotalUsed = COUNT(*) FROM ProductInfo WITH (NOLOCK) as p 
WHERE EXISTS ( SELECT ProductInfoId FROM ProductOrderInfo WITH (NOLOCK) 
WHERE ProductInfoId =p.ProductInfoId );

答案 2 :(得分:1)

假设ProductOrderInfo上没有孤立ProductInfoId,则以下内容:

SELECT @TotalUsed = COUNT(DISTINCT ProductInfoId) 
FROM ProductOrderInfo WITH (NOLOCK);

可能更快,因为它只能访问一个表。

无论运行哪个查询,如果ProductOrderInfo上的ProductInfoID都有索引,它应该运行得更快。