[英]EF generated query performance tuning required. Or a database issue?
我有一個由EF 6生成的搜索查詢, 有時會導致搜索條件出現性能問題,從而產生較大的結果。 查詢性能是不可預測的,有時性能不錯,有時卻不好。以下是sql profiler中捕獲的查詢,該查詢查詢一個視圖
exec sp_executesql N'SELECT
[Extent1].[LastName] AS [LastName],
[Extent1].[FirstName] AS [FirstName],
.
.
FROM (SELECT
[PersonView].[LastName] AS [LastName],
[PersonView].[FirstName] AS [FirstName],
.
.
FROM [Staff].[PersonView] AS [PersonView]) AS [Extent1]
WHERE [Extent1].[FirstName] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='smith'
以下是存儲庫代碼
public IEnumerable<PersonSearchResult> SearchPersons(Expression<Func<PersonView, bool>> searchCriteria)
{
var query = _entities.PersonViews.AsExpandable().Where(searchCriteria);
return query;
}
我正在使用謂詞構建器來創建動態搜索條件。
我擔心的是在相同搜索條件下性能的不可預測性。
以下是我的問題
我相信從表查詢格式選擇x中選擇x會導致此問題。 當我只執行Select的內部部分時,當整個查詢陷入困境時,它的性能會更好。 這需要調整嗎? 如果是,從哪里開始?
還是這是數據庫的問題? 因為此查詢有時表現良好?
WHERE
部分中的實際條件集,SQL Server可能會使用索引,這將導致更好的性能(假設有任何條件)。 通過非索引列進行的篩選速度很慢且占用資源,但最糟糕的是-不可預測的速度很慢,即今天可以忍受,明天就停滯不前。 通常,帶有冗長文本(例如人的名字)的列很少被索引,因此您的特定示例注定要表現不佳。 當然,除非按名/姓搜索是系統功能的關鍵部分,否則您將為搜索條件中可能提到的所有列創建索引,包括與這些列一樣大的索引。
我建議搜索顯示“建議索引”的SQL腳本,應該很方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.