我們正在與一個應用程序,.NET,其中當你按下一個按鈕DevExpress的形式被打開,一個SQL Server查詢工作被執行,因此它可與數據的一些組合框填寫。應用程序在許多客戶中運行良好,但是在特定的應用程序中,加載表單需要花費一分多鐘。我可以在性能監視器中看到,當我想要加載表單時,SQL Server佔用了大量CPU。SQL Server查詢性能差
我直接在SQL Server Management Studio中執行查詢,時間不超過一秒,但是我試着看看SQL Activity Monitor以及我在這裏可以看到的情況(不發生在其他客戶,相同的IO,相同的SQL ,同一切)是這樣的:
所以我可以在這裏看到,那我不明白的東西,這就是爲什麼是有這個查詢這麼多的執行?爲什麼檢索數據需要這麼長時間? 這裏it's這個查詢的執行計劃:
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,其中Code = N'13100271')
解決:
我終於通過添加索引了它提出的答案標記爲正確的,並添加代碼,在搜查nvarchar的值「碼」查詢,RHE之前的N按照shriop的評論建議的價值。謝謝大家的努力!
在第二個屏幕截圖中,是不是要求您在cuinac_pos.group列上創建索引? – nullforce
右鍵點擊執行計劃並選擇缺失索引。這會給你索引腳本。然後再試一次 – Hiten004
我構建了建議的索引作爲執行計劃,但沒有成功。 –