[英]How to optimize the left outer join with the case statement?
我有兩個名為 genproductstoreindex 和 QAT_ListElid2 的表。 我加入了左外連接,但執行需要很長時間。
SELECT genproductstoreindex.[ElID]
,CASE
WHEN QAT_ListElid2.LeftTSMKEY IS NULL
THEN genproductstoreindex.[TSMKEY]
ELSE QAT_ListElid2.LeftTSMKEY + RightTSMKEY
END
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
為了使用 case case 語句優化左外連接,我已替換為以下代碼,但數據看起來不正確。 請幫我解決這個問題。
DECLARE @lefttsmkey NVARCHAR(30)
SET @lefttsmkey = NULL
IF @lefttsmkey IS NULL
BEGIN
SELECT genproductstoreindex.[ElID]
,genproductstoreindex.[TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
END
ELSE
BEGIN
SELECT genproductstoreindex.[ElID]
,QAT_ListElid2.LeftTSMKEY + RightTSMKEY AS [TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
END
第一個查詢看起來不錯。 您希望這些索引能夠快速運行:
create index idx1 on genproductstoreindex(listelid);
create index idx2 on indexqat_listelid2(listelid, lefttsmkey);
如果RightTSMKEY
是RightTSMKEY
中的一列, indexqat_listelid2
其添加到第二個索引中。
您可以通過將查詢中使用的所有列添加到相關索引來覆蓋這兩個索引。 這將使它們更有可能被使用。 (如果您發現 DBMS 不使用其中一個,則無論如何您都可以輕松地再次刪除它。)
SELECT genproductstoreindex.[ElID]
,genproductstoreindex.[TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex with (nolock)
LEFT OUTER JOIN QAT_ListElid2 with (nolock) ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
where QAT_ListElid2.LeftTSMKEY IS NULL
UNION
SELECT genproductstoreindex.[ElID]
,QAT_ListElid2.LeftTSMKEY + RightTSMKEY AS [TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex with (nolock)
LEFT OUTER JOIN QAT_ListElid2 with (nolock) ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
where QAT_ListElid2.LeftTSMKEY IS NOT NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.