2014-12-24 2 views
2

У меня есть хранимая процедура, которая возвращается как минимум 40 тыс. Строк, и занимает около 20 секунд в SSMS 2008 R2, где база данных находится в Sql Azure, но когда я запускаю тот же Sp в моем приложении C#, используя EF 5 или просто обычный ADo.NET, это заняло 70-80 секунд.Чтобы оптимизировать производительность запроса

таблица имеет некластеризованной индекс ScenarioID

Sp просто выберите заявление с где условия. select * from Cost where ScenarioID= @ID

 using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand("sp_GetActCostsByID", con)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID; 
       con.Open(); 
       DataTable dt = new DataTable(); 
       DateTime timee = DateTime.Now; 
       Console.WriteLine(timee); 
       dt.Load(cmd.ExecuteReader()); 
       timee = DateTime.Now; 
       Console.WriteLine(timee); 
      } 
     } 

Есть ли способ, чтобы увеличить производительность:

Мой план выполнения:

enter image description here

+0

У вас есть 'Index' в колонке' Id' –

+0

Да См. Мое редактирование Спасибо – Vivekh

+0

Если стол Огромный, вы не можете ожидать, что результаты будут быстрыми. –

ответ

1

Ваш некластеризованным индекс ScenarioID может быть не помочь, если вы не INCLUDE все столбцы, которые вы пытаетесь вернуть, так как вам нужно будет выполнять поиск, чтобы получить эти другие столбцы - если для этого сценария много строк, вы можете закончить w с обычным сканированием таблицы. И это сводится к статистике, поэтому может варьироваться от сервера к серверу.

Если вы можете избежать необходимости в поиске, вы получите более стабильную производительность.

+0

Не похоже, что проблема OP имеет свое происхождение в базе данных, потому что он четко указал: «это занимает 20 секунд в SSMS» и 70 секунд от его приложения. Поэтому проблема должна быть на стороне C#. –

+0

Я включил все столбцы в индекс – Vivekh

+0

@ Энди - правильно, но другой план может появиться, если индекс не идеален. –

Смежные вопросы