Sql-Server-2017
連接中使用的列的列類型分析
是否可以對原始碼庫、視圖和儲存過程進行深入的類型分析,以辨識不具有兼容類型的列的連接?
我繼承了一個在使用 varchar 與 nvarchar 列方面不一致的數據庫。有時數字列與包含數字的文本欄位連接。現在有一些更改會在數據庫中的某些表中帶來更多數據,例如數千萬條記錄,並且連接類型中的任何差異都會對性能產生巨大影響。這些表具有 varchar 欄位,無法將它們更改為 nvarchar(它們由不支持 nvarchar 的第三方產品填充)。
我有的選擇:
- 將所有 varchar 列轉換為 nvarchar。不幸的是,這是不可能的。那將是我的首選。1.b 將所有 nvarchar 列轉換為 varchar。嗯…我覺得這是一個我可能不想進入的兔子洞,儘管所有的文本數據都應該是英文的。
- 使用 MS Transact SQL 解析器 ( DacFx ) 來分析查詢,但是,我覺得這將需要一些重大的程式工作。我需要所有 sql server 函式及其返回類型的完整列表。
還有其他想法嗎?
謝謝
是否可以對原始碼庫、視圖和儲存過程進行深入的類型分析,以辨識不具有兼容類型的列的連接?
這很可能是可能的,但我想推荐一種不同的方法。
…並且連接類型中的任何差異都會對性能產生巨大影響。
與其試圖全面修復所有這些不匹配,我會嘗試找出那些能給你帶來“最大收益”的問題。使用SQL Server First Responder Kit
sp_BlitzCache
中的儲存過程。你可以像這樣執行它:EXEC sp_BlitzCache @DatabaseName = N'YourDatabaseName';
預設情況下,這將為您提供來自該數據庫的 10 個 CPU 最密集的查詢。
在輸出中,有一個“警告”列,您應該能夠通過查找“隱式轉換”找到具有這些不匹配謂詞和連接列的查詢:
對於有該警告的行,您可以滾動到“隱式轉換資訊”列以獲取詳細資訊,從“查詢計劃”列中獲取執行計劃,或者僅使用“查詢文本”列將您引導到正確的位置.
我的主要觀點是,一些不匹配的數據類型可能不會導致任何真正的問題。如果伺服器由於特定表中的少數特定列而著火,您不想浪費時間修復這些問題。