Zapytanie SQL działające w SSMS działa bardzo wolno w ASP.NET
Mam stronę asp.net, która ładuje zapytanie, które wiemy, że działa dobrze (w ciągu 1 do 2 sekund), gdy wykonywane z SQL Server Management Studio, jednak gdy wykonywane z ASP.NET w SQLCommand zapytanie trwa znacznie dłużej, nie mogę Wydaje się, że odkryłem, co się dzieje, gdy do kwerendy nie został dodany jeden wiersz od czasu rozpoczęcia problemu, jednak nie mogę zlokalizować problemu.
Obrażająca linia kodu, która została dodana, to linia 6:bi.INGR_CODE != 0
Instrukcja SQL
SELECT bh.JOB_NUMBER, j.DESCRIPTION, SUM(bi.INGR_ACTUAL) AS TOTAL
FROM BATCH_HEADER AS bh LEFT OUTER JOIN
BATCH_INGR AS bi
ON bh.BATCH_ID = bi.BATCH_ID AND
bh.FACTORY = bi.FACTORY AND
bi.INGR_CODE <> 0 LEFT OUTER JOIN
ServerNameReplaced.man_prod.dbo.JOBS AS j
ON bh.JOB_NUMBER = j.JOB_NUMBER COLLATE database_default AND
bh.FACTORY = j.FACTORY COLLATE database_default
WHERE ( bh.FACTORY = @Factory ) AND
( bh.DATETIME_DUMP >= @StartDate ) AND
( bh.DATETIME_DUMP < @EndDate )
GROUP BY bh.JOB_NUMBER, j.DESCRIPTION
ORDER BY bh.JOB_NUMBER
ASP.NET Code Behind File
//Temporary List
List<BatchItem> data = new List<BatchItem>();
string SQLCommand = DBHelper.LoadSQLStatement( "batchdescription.sql" );
System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringNameReplaced"].ConnectionString);
System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand(SQLCommand, sqlConnection );
try
{
sqlCommand.Parameters.Add( "@StartDate", System.Data.SqlDbType.DateTime ).Value = StartDate;
sqlCommand.Parameters.Add( "@EndDate ", System.Data.SqlDbType.DateTime ).Value = EndDate;
sqlCommand.Parameters.Add( "@Factory", System.Data.SqlDbType.VarChar, 2 ).Value = Factory;
sqlConnection.Open();
SqlDataReader DataReader = sqlCommand.ExecuteReader();
while ( DataReader.Read() )
{
data.Add(
new BatchItem()
{
JobNumber = DataReader[0].ToString(),
Description = DataReader[1].ToString(),
Total = decimal.Parse( DataReader[2].ToString() )
} );
}
}
catch ( Exception ex )
{
//handle exceptions
}
finally
{
sqlConnection.Close();
}