Мы работаем с приложением .NET, в котором при нажатии кнопки открывается форма DevExpress и выполняется запрос SQL Server, поэтому он может заполнять данные некоторыми сводками. Приложение работает отлично у многих клиентов, но в частности, он занимает больше минуты при загрузке формы. Я вижу на мониторе производительности, что SQL Server занимает много CPU, когда я хочу загрузить форму.Неверная производительность SQL Server
Я выполнил запрос непосредственно в SQL Server Management Studio, заняв не более секунды, однако я попытался взглянуть на монитор активности SQL и то, что я вижу здесь (не происходит с другими клиентами, такими же IO, одинаковыми SQL , то же самое все) это:
так что я могу видеть здесь, что я не понимаю, это почему этот запрос, имеющие столько казни? Почему он так долго извлекает данные? Здесь подмигнули план выполнения этого запроса:
Select *
From cuinac_pos
Where [group] in (Select [group]
From proc_groups
Where Code = 13100271)
Спасибо за любую помощь вы можете дать мне, и, пожалуйста, если я могу дать больше информации, не стесняйтесь спрашивать.
Еще раз спасибо!
после добавления плана выполнения РЕКОМЕНДУЕМЫЙ ИНДЕКС
ИСПОЛНЕНИЯ ПЛАН QUERY
Select count(*)
From proc_groups
Where Code = 13100271
Определение индекса в proc_groups:
Пример кода: план
private static void LoadDTPurchaseHerdRelation(Int32 status, Int32 herdNumber)
{
try
{
StringBuilder sb = new StringBuilder();
sb.Append(" Select gr.[group] as HerdId, gr.code as HerdNumber, bo.code as PurchaseCode");
sb.Append(" From cuinac_pos bo ");
sb.Append(" inner join proc_groups gr on bo.code=gr.code ");
if (herdNumber == 0)
{
string s1 = " Where (gr.created between '2015-12-09' And '2016-01-08') ";
sb.Append(s1);
if (status != 4)
{
string s2 = string.Format(" AND bo.purchasestatus = {0} ", status);
sb.Append(s2);
}
sb.Append(" order by bo.code ");
}
else
{
string s3 = string.Format(" Where gr.code = '{0}' ", herdNumber);
sb.Append(s3);
}
DTPurchaseHerdRelation.Clear();
using (ConnectionScope cs = new ConnectionScope())
{
SqlDataAdapter adapter = new SqlDataAdapter(sb.ToString(), (SqlConnection)cs.Connection);
adapter.Fill(DTPurchaseHerdRelation);
}
}
catch (Exception ex)
{
}
}
}
}
исполнения для запроса
Select * From cuinac_pos Где [группа] в (Выберите [группа] из proc_groups, где Код = N'13100271 ')
Решено:
я, наконец, получил его, добавляя индексы предложил в ответ помечается как правильно, и добавление в коде, в запросах, которые искомых по значению NVARCHAR «Кодекс», н- до того RHE как это предлагается в комментариях shriop. Спасибо всем за ваши усилия!
Во 2-м скриншоте, это не просит вас создать индекс на столбце cuinac_pos.group? – nullforce
щелкните правой кнопкой мыши на плане выполнения и выберите отсутствующий индекс. это даст вам индексный скрипт. затем повторите попытку – Hiten004
Я построил предложенный индекс как план выполнения, без успеха. –