У меня есть запрос SQL, выполнение которого занимает менее секунды, когда я использую SQL Management Studio, но когда мой код выполняет его, для получения результата от сервера базы данных требуется более 30 секунд.Результат содержит 1700 строк.Другой подобный запрос, который возвращает 900 строк, занимает несколько мс.В чем может быть причина этого странного поведения?
public SqlDataReader ExecuteReader(string strSQL, ArrayList arParams)
{
OpenConnection();
SqlCommand myCommand = new SqlCommand(strSQL, myConnection);
myCommand.CommandTimeout = intTimeout;
foreach (SqlParameter myParameter in arParams)
myCommand.Parameters.Add(myParameter);
return myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
strSQL:
SELECT [Group].[Id]
,[Group].[intCustomerId]
,[Group].[strName]
,[Permission].[dtmCreated]
,[Permission].[intPermissionTypeId]
,[Permission].[intObjectTypeId]
,[Permission].[intObjectId]
,[Permission].[blnActive]
,[Permission].[blnHaveAccess]
,[Permission].[intLevelTypeId]
FROM [Group]
LEFT JOIN Permission ON [Group].[Id] = intGroupId AND
intObjectId = @ObjectId AND
intObjectTypeId = @ObjectTypeId AND
intLevelTypeId = @LevelType AND
intPermissionTypeId = @PermissionTypeId AND
blnActive = 1
WHERE [Group].[intCustomerId] = @CustomerId AND
[Group].[blnDeleted] = 0
ORDER BY strName, blnActive DESC
arParams:
arParams.Add(DatabaseHandler.MakeSqlParameter("@CustomerId", customer.Id));
arParams.Add(DatabaseHandler.MakeSqlParameter("@ObjectId", masterprocess.Id));
arParams.Add(DatabaseHandler.MakeSqlParameter("@ObjectTypeId", Convert.ToInt32(ObjectType.MasterProcess)));
arParams.Add(DatabaseHandler.MakeSqlParameter("@PermissionTypeId", Convert.ToInt32(permissiontype)));
arParams.Add(DatabaseHandler.MakeSqlParameter("@LevelType", Convert.ToInt32(leveltype)));
DatabaseHandler.MakeSqlParameter:
public static SqlParameter MakeSqlParameter(String strName, int intInput)
{
return new SqlParameter(strName, intInput);
}