하나의 Linq 쿼리가 있습니다. 쿼리를 실행하면 10 초 동안 만 모델에 데이터를 추출하는 데 13 초가 걸립니다. 내가 쓴 쿼리가 성능에 좋은지 아닌지를 알아야합니다. 내가 뭘 잘못하고 있는지 안내해 줘. 이 외부 LINQ 문의 모든 항목에 대해 3 내부 LINQ 문을 실행하기 때문에더 나은 방법으로이 LINQ 쿼리를 작성하는 방법
코드
var stocktakelist = (from a in Db.Stocktakes
select new ExportStock
{
Id = a.Id,
ItemNo = a.ItemNo,
AdminId = (from admin in Db.AdminAccounts where admin.Id == a.Id select admin.Name).FirstOrDefault(),
CreatedOn = a.CreatedOn,
Status = (from items in Db.Items where items.ItemNo == a.ItemNo select items.ItemStatu.Description).FirstOrDefault(),
Title = (from tit in Db.BibContents where tit.BibId == (from bibs in Db.Items where bibs.ItemNo == a.ItemNo select bibs.BibId).FirstOrDefault() && tit.TagNo == "245" && tit.Sfld == "a" select tit.Value).FirstOrDefault() // This line of Query only makes the performance Issue
}
).ToList();
감사
나는 당신이 어떤 조인 필요가 있다고 생각합니다. 봐 [여기] (http://msdn.microsoft.com/en-us/vstudio/bb737929) 및 [여기] (http://stackoverflow.com/a/4115353/106866). 또한 DB.Stocktakes가 IQueryable인지 확인하십시오. 나는 IQueryables가 IEnumerables보다 빠르다는 것을 발견했다. 왜냐하면 IQueryables가 모든 데이터를 먼저 검색하는 대신에 데이터베이스에서 많은 작업을 수행하고 그로부터 몇 가지 트릭을 수행하기 때문이다. – jao
자오가 말했듯이 조인은 이동하는 방법입니다 (객체에 네비게이션 속성이없는 경우). 또한, 데이터베이스의'Items.ItemNo' 등등에 대한 인덱스를 가지고 있는지 확인하십시오. – Alex
먼저 SQL 쿼리를 작성하여 원하는 데이터를 얻은 다음 LINQ 쿼리로 작성하는 데 도움이 될 수 있습니다. LINQ 쿼리를 작성하는 데 어려움이있을 때이 작업을 수행합니다. – Thelonias