2014-03-29 2 views
1

그래서 나는 몇 가지 SQL 쿼리가 필요합니다. linq에서 생성 된 SQL은 매우 subpar 보인다 및 저장 프로 시저 시간이 초과되었습니다.Linq를 더 나은 sql 쿼리로 변환

다음은 내가하려는 일입니다.

두 테이블, 다음과 같이 :

dbo.Links 
------------- 
Id 
Url 
Title 

그리고 내가하고 싶은 어떤이

dbo.Link_Counts 
----------------- 
Url 
Count 

처럼 보이는 또 다른 하나는이

var linkCounts = Links.GroupBy(x => x.Url) 
       .Select(grp => new Link_Counts 
        { 
         Url = grp.First().Url, 
         Count = grp.Count() 
        }); 

InsertAllOnSubmit(linkCounts); 
SubmitChanges(); 
을하는 SQL 쿼리를 작성하다

일부 사용하려는 SQL은

입니다.
INSERT INTO Link_Counts (Url, Count) 
SELECT (
    SELECT [t3].[URL] 
    FROM (
     SELECT TOP (1) [t2].[URL] 
     FROM [Links] AS [t2] 
     WHERE (([t1].[URL] IS NULL) AND ([t2].[URL] IS NULL)) OR (([t1].[URL] IS NOT NULL) AND ([t2].[URL] IS NOT NULL) AND ([t1].[URL] = [t2].[URL])) 
     ) AS [t3] 
    ) AS [Url], [t1].[value] AS [Count] 
FROM (
    SELECT COUNT(*) AS [value], [t0].[URL] 
    FROM [Links] AS [t0] 
    GROUP BY [t0].[URL] 
    ) AS [t1] 
END 

분명히 저장 프로 시저의 실행 시간이 너무 길었습니다.

도움이 될 것입니다.

insert into Link_Counts (Url, Count) 
select Url, Count(*) 
from dbo.Links 
group by Url 

답변

3

당신이 손으로 SQL 작성하려는 경우 :

감사

+0

죄송합니다 ... linq 쿼리에 대한 좋은 호출 –

2

나는이 각 URL의 수를 삽입 할 필요가 무엇을 생각

insert into link_counts (url, count) 
select url, count(0) 
from links 
group by url 

를 또는, 더 나은 SQL을 생성하기 위해 LINQ 쿼리를 수정하려는 경우 :

var linkCounts = 
    Links.GroupBy(x => x.Url) 
     .Select(g => new Link_Counts 
      { 
       Url = g.Key, 
       Count = g.Count() 
      };