我正在創建一個臨時表,其中填充了特定用戶的前 25 個項目。然後我使用這個臨時表從另一個表中獲取這些項目的所有部分。
這些是我的步驟:
DECLARE @tableIds TABLE (id uniqueidentifier)
INSERT INTO @tableIds
SELECT TOP 25 I.Id
FROM Items I
INNER JOIN UserItems UI ON I.Id = UI.UserId
WHERE UI.UserId = 'b846371d-5afc-eb11-b563-0003ff2a40c4'
AND I.Valid = 1
ORDER BY I.[TimeStamp] DESC
現在,當我使用 id 上的 IN 子句對物品進行查詢時,查詢速度非常慢。運行時間超過 2 分鐘並導致應用程序超時。itempieces表中只有1700個相關行,但總共有超過200萬行。查詢是這樣的:
SELECT
IPs.Id,
IPs.ItemId,
IPs.[Name],
IPs.PartNo,
IPs.PartPosition,
IPs.Size,
IPs.Step
FROM
ItemPieces IPs
WHERE
Ips.ItemId IN (SELECT id FROM @tableIds)
我考慮過使用並嘗試了EXISTS
許多示例後的子句,但我很難弄清楚如何讓它工作並返回相關結果。相反,它返回了所有內容,而不僅僅是相關的行。
我該如何寫這個以便我只獲得相關的行但它也很快?
謝謝
我會重新設計它以使用內部連接到您的有限值列表。使用您的兩個查詢,它會是這樣的。
SELECT IPs.Id,
IPs.ItemId,
IPs.[Name],
IPs.PartNo,
IPs.PartPosition,
IPs.Size,
IPs.Step
FROM ItemPieces IPs
inner join
(
SELECT TOP 25 I.Id
FROM Items I INNER JOIN
UserItems UI on I.Id = UI.UserId
WHERE UI.UserId = 'b846371d-5afc-eb11-b563-0003ff2a40c4'
AND I.Valid = 1
ORDER BY I.[TimeStamp] DESC
) x on x.id = IPs.ItemId
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句