0

我对查询的性能有疑问。

我有一个名为 tblHistory 的表,它包含 17'000 行。我有一个名为 tblItem 的表,它有 14'000 行,一个表 tblItemType 有大约 10 行,它们的关系如下面的查询中所述。

以下查询显示管理 Studio 中的 0sec:

Select tblItem_Id, tblItem_Title, 
CountHistoryItems = 
(
SELECT count(*) FROM tblHistory 
where tblHistory_ItemId = tblItem_Id 
)
from tblItem INNER JOIN tblItemType ON tblItem_ItemTypeId = tblItemType_Id 

以下查询在 Management Studio 中显示 0sec:

Select tblItem_Id, tblItem_Title
from tblItem INNER JOIN tblItemType ON tblItem_ItemTypeId = tblItemType_Id 
where 
(  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000200' or  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000300'
) 

一旦我像下面的查询一样使用这两个示例,它需要在 managament Studio 中大约 2 分钟才能获得结果:

Select tblItem_Id, tblItem_Title,
CountHistoryItems = 
(
SELECT count(*) FROM tblHistory 
where tblHistory_ItemId = tblItem_Id 
)
from tblItem INNER JOIN tblItemType ON tblItem_ItemTypeId = tblItemType_Id
where 
(  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000200' or  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000300'
) 

你知道为什么这需要这么长时间吗?或者你能告诉我怎样才能让它更快吗?

非常感谢。

此致。伊万

4

2 回答 2

1

你可以试试这个:

select 
    tblItem_id
    ,   tblItem_Title
    ,   count(*) as CountHistoryItems
from
    tblItem 
    inner join tblItemType on tblItem_ItemTypeId = tblItemType_id
    inner join tblHistory on tblItem_id = tblHistory_itemId
group by tblItem_id, tblItem_title
where 
(  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000200' or  
    tblItemType_BaseTypeId = '00000000-0000-0000-0000-000000000300'
) 

如有必要,还重建索引(PK_tblItem 和 PK_tblHistory)

于 2013-10-14T12:25:05.927 回答
0

tblItemType_BaseTypeId如果你还没有创建一个非聚集索引

于 2013-10-14T11:34:49.617 回答