저장 프로 시저 매개 변수에 데이터 형식 [bigint]
을 사용하기 시작할 때 응용 프로그램에 심각한 성능 문제가 있음을 알았습니다. 아래의 빠른 코드에 대한 매개 변수 데이터 형식은 [nvarchar](50)
입니다. 아래는 내가 변경 한 코드입니다.이 간단한 호출은 <에서 1 초 (빠른 코드)에서 20 초 (느린 코드)로 변경되었습니다. 이 문제의 원인은 무엇입니까? [bigint]
을 어떻게 사용할 수 있습니까? .NET 4.0에서 Enterprise Library 5 (Database Application Block)를 사용하고 있습니다.T-SQL bigint 저장 프로 시저 매개 변수에 C# 형식의 Int64 인수를 전달할 때 성능이 저하되었습니다.
(빠른) 전 :
Database db = DatabaseFactory.CreateDatabase("APP");
DbCommand cmd = db.GetStoredProcCommand("sp_test");
db.AddInParameter(cmd, "@crud_command", DbType.String, "read");
db.AddInParameter(cmd, "@network_login", DbType.String, "abc231");
db.AddInParameter(cmd, "@id_filter", DbType.String, id_filter);
DataSet ds = db.ExecuteDataSet(cmd);
(느리게) 후 :
Database db = DatabaseFactory.CreateDatabase("APP");
DbCommand cmd = db.GetStoredProcCommand("sp_test");
db.AddInParameter(cmd, "@crud_command", DbType.String, "read");
db.AddInParameter(cmd, "@network_login", DbType.String, "abc231");
db.AddInParameter(cmd, "@id_filter", DbType.Int64, Convert.ToInt64(id_filter));
DataSet ds = db.ExecuteDataSet(cmd);
변환 작업 중 하나가 시간이 걸릴 수 있습니까? 매개 변수 변환을 사용하거나 사용하지 않고 격리하고 시도해 보셨습니까? 아마도 당신은 그것을 던질 수 있었고 더 빠를 수있었습니다. 또한 "addwithvalue"를 대신 사용해 볼 수도 있습니다. 그런 다음 sql 명령에 어떤 형식을 추가할지 지정하지 않아도됩니다. – Johan
같은 문제가 있지만 다른 상황에 대해 알아 봤습니다. 매개 변수화 된 INSERT ... 명령을 생성하여 하나의 테이블에 데이터를로드합니다. SQL Server Profiler는 명령이'exec sp_executesql ...'으로 실행되고 있음을 확인합니다. 형식 (또는 크기, 정밀도 등의 다른 정보)을 지정하지 않으면 매개 변수의 기본값은'nvarchar '이며 명령은 꽤 빠릅니다. 1-1.5 분 안에 37,000 개의 행이 삽입되었습니다. 커맨드는 매개 변수에 관련 유형 정보를 포함하면 * 많이 * 느려집니다. "관련 유형 정보"는 대상 테이블 열의 정확한 유형 정보를 의미합니다. –