這是SQLSELECT tal.TrustAccountValueFROM TrustAccountLog AS talINNER JOIN TrustAccount ta ON ta.TrustAccountID = tal.TrustAccountIDINNER JOIN Users usr ON usr.UserID = ta.UserIDWHERE usr.UserID = 70402 ANDta.TrustAccountID = 117249 ANDtal.trustaccountlogid = ( SELECT MAX (tal.trustaccountlogid) FROM TrustAccountLog AS tal INNER JOIN TrustAccount ta ON ta.TrustAccountID = tal.TrustAccountID INNER JOIN Users usr ON usr.UserID = ta.UserID WHERE usr.UserID = 70402 AND ta.TrustAccountID = 117249 AND tal.TrustAccountLogDate < '3/1/2010 12:00:00 AM')基本上,有一個Users表,一個TrustAccount表和一個TrustAccountLog表。用戶:包含用戶及其詳細信息TrustAccount:一個用戶可以有多個TrustAccounts。TrustAccountLog:包含對所有TrustAccount“運動”的審核。一個TrustAccount與多個TrustAccountLog條目關聯(lián)?,F(xiàn)在,此查詢在SQL Server Management Studio中以毫秒為單位執(zhí)行,但是由于某些奇怪的原因,它在我的C#應用程序中永久占用時間,有時甚至超時(120s)。簡而言之,這是代碼。它在循環(huán)中被多次調用,并且語句已準備好。cmd.CommandTimeout = Configuration.DBTimeout;cmd.CommandText = "SELECT tal.TrustAccountValue FROM TrustAccountLog AS tal INNER JOIN TrustAccount ta ON ta.TrustAccountID = tal.TrustAccountID INNER JOIN Users usr ON usr.UserID = ta.UserID WHERE usr.UserID = @UserID1 AND ta.TrustAccountID = @TrustAccountID1 AND tal.trustaccountlogid = (SELECT MAX (tal.trustaccountlogid) FROM TrustAccountLog AS tal INNER JOIN TrustAccount ta ON ta.TrustAccountID = tal.TrustAccountID INNER JOIN Users usr ON usr.UserID = ta.UserID WHERE usr.UserID = @UserID2 AND ta.TrustAccountID = @TrustAccountID2 AND tal.TrustAccountLogDate < @TrustAccountLogDate2 ))";cmd.Parameters.Add("@TrustAccountID1", SqlDbType.Int).Value = trustAccountId;cmd.Parameters.Add("@UserID1", SqlDbType.Int).Value = userId;cmd.Parameters.Add("@TrustAccountID2", SqlDbType.Int).Value = trustAccountId;cmd.Parameters.Add("@UserID2", SqlDbType.Int).Value = userId;// And then...reader = cmd.ExecuteReader();if (reader.Read()){ double value = (double)reader.GetValue(0); if (System.Double.IsNaN(value)) return 0; else return value;}else return 0;
.NET應用程序中的SQL查詢速度較慢,但??在SQL Server Management
qq_遁去的一_1
2019-10-28 17:00:38