1 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
死鎖的一個(gè)常見原因是需要查詢和索引調(diào)整的查詢觸及的數(shù)據(jù)多于必要的數(shù)據(jù)。
死鎖跟蹤顯示參數(shù)作為nvarchar(4000)
數(shù)據(jù)類型傳遞。這可能會(huì)阻止有效使用列上的索引,varchar
因?yàn)?code>nvarchar它的數(shù)據(jù)類型優(yōu)先級(jí)高于varchar
. 當(dāng)從應(yīng)用程序數(shù)據(jù)類型推斷參數(shù)數(shù)據(jù)類型時(shí),此問題尤其常見,因?yàn)樽址ǔJ?Unicode,例如在 Java 和 .NET 語言中,導(dǎo)致nvarchar
參數(shù)與基礎(chǔ)列數(shù)據(jù)類型無關(guān)。
解決方案是對(duì)字符串使用 varchar 參數(shù)而不是 nvarchar,除非基礎(chǔ)列是nvarchar
. 如果您不在nvarchar
數(shù)據(jù)庫中使用,請(qǐng)指定 JDBC 連接字符串參數(shù)sendStringParametersAsUnicode
,如本答案中所述?;蛘撸膽?yīng)用程序代碼或框架配置以使用列的varchar
參數(shù)類型varchar
。
最佳實(shí)踐是確保參數(shù)與基礎(chǔ)數(shù)據(jù)庫列的類型相匹配。這將提高性能和并發(fā)性,并且還有其他好處。
添加回答
舉報(bào)