我有3张桌子; A为10000行,B为392540行,C为200189行。
如果我这样查询,
SELECT * FROM A a
LEFT JOIN B b
ON b.Id = a.Id
我会在一分钟内得到结果。此外,如果我这样查询,
SELECT * FROM A a
CROSS APPLY(SELECT *
FROM C c
WHERE c.Id = a.Id
) com
它还会在一分钟或更短的时间内返回数据。 但是当我把三者结合起来时,
SELECT * FROM A a
LEFT JOIN B b
ON b.Id = a.Id
CROSS APPLY (SELECT *
FROM C c
WHERE c.Id = a.Id
) com
查询在30分钟后仍在运行。请注意,我使用CROSS APPLY而不是INNER JOIN,因为INNER JOIN需要更长的时间。我已经尝试用OUTER APPLY替换LEFT JOIN,但似乎没有任何效果。有人可以建议一个更好的方式来加入这些表吗?感谢。
EDIT 表由客户提供。我只在表B中添加了逻辑。对于A和C,我直接从他们提供的表中获取它。这是我对表B做的事情
DECLARE @B AS TABLE(
[Id] nvarchar(max)
, [Name] nvarchar(max)
, [ProductId] nvarchar(max)
, [ProductName] nvarchar(max)
)
INSERT INTO @B
SELECT
a.[Id]
, a.[Name]
, a.[ProductId]
, a.[ProductName]
FROM ( SELECT
[Id]
, [Name]
, [ProductId]
, [ProductName]
, ROW_NUMBER() OVER(PARTITION BY [Id] ORDER BY [Name] DESC) num
FROM tableBbyClient
WHERE [Description] = 'AS'
) a
WHERE a.num=1