Sql-Server-2016

如何更好地為連接進行隱式轉換(強制轉換)?

  • July 8, 2022

我有一個像這樣的奇怪查詢:

SELECT T1.*
FROM Table1 T1
INNER JOIN #TEMP an ON  an.Id = T1.AccNum
                   LEFT OUTER JOIN Table2 T2
                       ON  CAST(T2.Ref_tranID as bigint)= T1.Table1ID
                       AND CAST(T2.Ref_TranLineID as int) = T1.ItmSeq
                       AND T2.PrID = 50
                   where T2.Table2ID IS NULL AND T1.CalDateDate >= '2022-06-15'  and  T1.CalDateDate <= '2022-06-16'

問題之一T1.AccNum是 MAX,所以我不能在索引中使用它(這將在本月修復,呵呵)。

但我認為這裡的問題是這些演員表。

它們最初是 varchar。我得到了一些我已經在修復的 keyLokups,但是有沒有更聰明的方法來處理這些演員表?

老實說,我們有 2 個這樣的查詢(相同),中間有一個聯合,但修復一個將修復另一個。

我試圖用正確的數據類型填充臨時表,但我仍然讓查詢執行了 3 分鐘以上。

你可以:

  • 修復基表中的數據類型,並對其進行索引
  • 在基表上創建計算列,並為它們編制索引
  • 將一些過濾結果轉儲到 #temp 表中,並將列轉換為正確的數據類型,並為它們編制索引
  • 如果您使用的是企業版,請引入批處理模式

在執行時沒有更好或更好的方法來執行此操作。

引用自:https://dba.stackexchange.com/questions/314184