2017-09-11 1 views
1

말 그대로 수백만 행의 뷰가 있습니다.이 뷰는 모든 것을 실행할 때 타임 아웃되지만 데이터의 스냅 샷을 다시 가져올 수있는 선택을 할 수 있습니다.대용량 데이터 세트 쿼리에 값 연결

VIEW의 A (5,000,000 이상 행 - 시간 초과 모든 것을 실행) enter image description here

내가 다음에 내보내 열 0을 기준으로 기준 이름과 KeyDescription2을 연결하려고하고 뚜렷한 기준을 IDNO 해요 CSV 또는 스프레드 시트. 다음 루프 기준 이름을 얻는 통해 enter image description here

내가 원래 테이블에서 별개의 열 0 idnumber을 선택 .asp 인 페이지를 만들었을 달성하기 위해 노력하고

결과. 이것은 잘 작동하지만 1000 행을 수행하는 데 2 ​​분이 걸립니다. 즉, 전체 보고서를 실행하는 데 반 년이 걸릴 것입니다 !! 이를 성취하기 위해서는보다 빠르고 더 나은 방법이 필요합니다. 누구든지 SQL-Server 자체에서 직접 결과를 얻는 방법을 알고 있습니다.

+0

나중에 참조 할 수 있도록 이미지에 도움을 요청할 때 적합하지 않습니다. 대신이 편리한 도구로 만든 것과 같은 텍스트 테이블을 사용하십시오. https://senseful.github.io/text-table/ – SqlZim

답변

2

stuff() with select ... for xml path ('') method of string concatenation을 사용하십시오.

select 
    Column0 
    , idno 
    , grouppid 
    , Criterianame = stuff((
     select ', '+ i.CriteriaName +': ' + i.KeyDescription2 
     from view_a as i 
     where i.Column0 = a.Column0 
     and i.grouppid = a.grouppid 
     and i.idno = '' -- `i.idno is null` if your blank value is a null 
     for xml path (''), type).value('(./text())[1]','nvarchar(max)') 
    ,1,2,'') 
    , criteriatype2 
    , keydescription2 
from view_a as a 
where a.idno <> '' -- `a.idno is not null` if your blank value is a null 

참고 : 당신이 원하는 결과에 표시된대로

  • 이것은 당신의 날짜 값을 포맷하지 않습니다.
  • 반복하는 것보다 빠르지 만 여전히 빠른 것은 아닙니다.
  • 기본 테이블을 사용하면 성능이 향상되는지 여부를 조사 할 수 있습니다.
  • SQL Server 2017에서는 string_agg()을 사용할 수 있습니다.
+0

감사합니다. 지금 실행하십시오. 8 분 안에 20,000 줄을 완료하므로 9 시간이 걸릴 것입니다. 시간 초과되지 않으면 쿼리 ... 이전에 개선하지만 당신은 빠르다. – Emma

+1

@Emma 부울 질의에 'i.Column0 = a.Column0'이라는 추가 절이 생겼습니다. 다음 단계는이 쿼리의 실행 계획과'view_a '의 코드를 검토하여 쿼리를 더 잘 지원할 수있는 인덱스 나 인덱스가 누락되었는지 확인하는 것입니다. – SqlZim

관련 문제