절차에 기준을 추가하면 성능이 저하됩니다.

JJ32

fncDeptInfo 함수가 있습니다. 현재 1 초 이내에 약 1000 개의 레코드를 반환합니다.

ALTER FUNCTION [dbo].[fncDeptInfo]()
RETURNS TABLE 
AS
RETURN 
(
    SELECT 
        tblContacts.Contact, 
        CASE tblContacts.Parent1
            WHEN 1900 THEN 0 
            WHEN 1901 THEN 1
            WHEN 1902 THEN 2
            WHEN 1903 THEN 3
            WHEN 1904 THEN 4
            WHEN 1905 THEN 5
            WHEN 1906 THEN 6
            ELSE NULL 
        END AS PRArea,
        DISTRICT.Contact AS DistrictID
    FROM 
        tblContacts 
    LEFT OUTER JOIN
        tblContacts AS DISTRICT ON tblContacts.Parent2 = DISTRICT.Contact 
    WHERE    
        (tblContacts.ContactType = 'Fire') AND
        (tblContacts.SubType = 'Dept')
)

아래에이 함수를 호출하는 절차가 있습니다.

SELECT  
    fncDeptInfo.Contact, DEPTPAID.CurPaid, 
    fncDeptInfo.PRArea, fncDeptInfo.DistrictID              
FROM    
    fncDeptInfo() AS fncDeptInfo 
INNER JOIN
    (SELECT 
         v_Item.BillToContact AS Contact,
         SUM(CASE WHEN Expiration = @Date1 AND tblProgramCodes.FormatCode = 'Membership' THEN 1 ELSE 0 END) AS CurPaid
     FROM 
         v_Item 
     INNER JOIN
         tblProgramCodes ON v_Item.ProgramCodeID = tblProgramCodes.ProgramCode 
     GROUP BY 
         v_Item.BillToContact) DEPTPAID ON fncDeptInfo.Contact = DEPTPAID.Contact
WHERE 
    (fncDeptInfo.PRArea > 0) AND (fncDeptInfo.DistrictID > 0) 
ORDER BY 
    fncDeptInfo.Contact

v_Item여러 테이블에 걸쳐 재무 기록을 롤업하는 매우 복잡한보기입니다. 300,000 개 이상의 행을 반환합니다. 설계된 절차는 5 초 내에 반환됩니다.

fncDeptInfo에 Chief 정보를 얻기 위해이 부분을 추가하면 절차는 1 분 30 초가 걸립니다. 그러나 fncDeptInfo 자체는 여전히 약 1 초 안에 반환됩니다.

LEFT OUTER JOIN fncEmployee(GETDATE(), 'Chief') AS CHIEF 
  ON tblContacts.Contact = CHIEF.Contact2 

이 기준을 절차에 추가하면 이제 1 분 30 초가 걸립니다. 그러나 프로 시저에서 fncDeptInfo를 제거하면 약 5 초 후에 다시 반환됩니다.

WHERE CurPaid > 0

내 생각 엔 뷰가 두 경우 모두 관련되어 있고 반복적으로 호출되고 있다는 것입니다. 누군가 성능이 저하되지 않도록 이것을 설계하는 더 나은 방법을 제안 할 수 있습니까?

로민

간단한 옵션은 뷰를 반복적으로 호출하지 못하도록 임시 테이블로 뷰를 선택하는 것입니다. 같은 것

IF Object_ID ('tempdb..vitem_tmp') is not null DROP TABLE #vitem_tmp

SELECT *
INTO #vitem_tmp
FROM v_Item

[Your query, referencing #vitem_tmp instead of v_Item]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SSD에 Ubuntu가 설치되어 있습니다. 저장 공간을 늘리기 위해 HDD를 장착하면 성능이 저하됩니까?

분류에서Dev

WPF : 창 크기를 늘리면 성능이 저하됩니다.

분류에서Dev

캔버스 크기를 1 픽셀 늘리면 Chrome에서 성능이 저하됩니다.

분류에서Dev

VStack에 SFSymbol을 추가하면 이상한 간격이 생성됩니다.

분류에서Dev

정규화를 추가하면 성능이 저하되고 저하됩니다.

분류에서Dev

Pandas DataFrame에 행을 추가하면 열이 0 개 추가됩니다.

분류에서Dev

Java의 각 작은 기능에 대한 메소드를 생성하면 성능이 저하됩니까?

분류에서Dev

jQuery : tr을 테이블 tbody에 추가하면 tr 클릭 기능이 방지됩니다.

분류에서Dev

jQuery : tr을 테이블 tbody에 추가하면 tr 클릭 기능이 방지됩니다.

분류에서Dev

객체 선언을 루프 안에 넣으면 성능이 저하됩니까?

분류에서Dev

내 PC의 성능이 갑자기 저하됩니다.

분류에서Dev

명령을 저장하면 배치 파일에 변수가 생성됩니다.

분류에서Dev

MySQL Insert 성능은 기본 키의 크기로 인해 큰 테이블에서 저하됩니다.

분류에서Dev

내 프로그램을 실행하기 위해 mpirun을 사용하면 성능이 많이 저하됩니다.

분류에서Dev

왜 성능을 내 스트림 복사 절차 꾸준히 저하를 않습니다

분류에서Dev

보기 그룹에 새보기를 추가하면 Android 게임에서 빈 화면이 생성됩니다.

분류에서Dev

그림을 pyplot에 저장하면 빈 창이 생성됩니다.

분류에서Dev

List 내의 Button에 contextMenu를 추가하면 기본 Button 기능이 방지됩니다.

분류에서Dev

'Commit Retaining'을 사용하면 Firebird 성능이 저하됩니까?

분류에서Dev

Oracle DB에서 필드의 데이터 유형을 변경하면 성능이 저하됩니까?

분류에서Dev

백엔드 애플리케이션에 Webpack을 사용하면 성능이 저하됩니까?

분류에서Dev

TableView에 항목을 동적으로 추가하면 셀이 반복됩니다.

분류에서Dev

PHP에서 7 일을 추가하면 시간이 잘못 계산됩니다.

분류에서Dev

Powershell이 테이블에 행을 추가하면 두 개의 테이블이 생성됩니다.

분류에서Dev

CDN 호출에 "http"를 추가하면 성능 차이가 있습니까?

분류에서Dev

비트 맵을 파일에 저장하면 검은 색 이미지가 생성됩니다.

분류에서Dev

JSON에 사용자 지정 속성을 추가하면 중복이 생성됩니다.

분류에서Dev

Vim을 통해 플랫 파일을 저장하면 새 줄을 만드는 파일에 보이지 않는 바이트가 추가됩니다.

분류에서Dev

MySQL은 파일 정렬을 사용하고 성능이 저하됩니다.

Related 관련 기사

  1. 1

    SSD에 Ubuntu가 설치되어 있습니다. 저장 공간을 늘리기 위해 HDD를 장착하면 성능이 저하됩니까?

  2. 2

    WPF : 창 크기를 늘리면 성능이 저하됩니다.

  3. 3

    캔버스 크기를 1 픽셀 늘리면 Chrome에서 성능이 저하됩니다.

  4. 4

    VStack에 SFSymbol을 추가하면 이상한 간격이 생성됩니다.

  5. 5

    정규화를 추가하면 성능이 저하되고 저하됩니다.

  6. 6

    Pandas DataFrame에 행을 추가하면 열이 0 개 추가됩니다.

  7. 7

    Java의 각 작은 기능에 대한 메소드를 생성하면 성능이 저하됩니까?

  8. 8

    jQuery : tr을 테이블 tbody에 추가하면 tr 클릭 기능이 방지됩니다.

  9. 9

    jQuery : tr을 테이블 tbody에 추가하면 tr 클릭 기능이 방지됩니다.

  10. 10

    객체 선언을 루프 안에 넣으면 성능이 저하됩니까?

  11. 11

    내 PC의 성능이 갑자기 저하됩니다.

  12. 12

    명령을 저장하면 배치 파일에 변수가 생성됩니다.

  13. 13

    MySQL Insert 성능은 기본 키의 크기로 인해 큰 테이블에서 저하됩니다.

  14. 14

    내 프로그램을 실행하기 위해 mpirun을 사용하면 성능이 많이 저하됩니다.

  15. 15

    왜 성능을 내 스트림 복사 절차 꾸준히 저하를 않습니다

  16. 16

    보기 그룹에 새보기를 추가하면 Android 게임에서 빈 화면이 생성됩니다.

  17. 17

    그림을 pyplot에 저장하면 빈 창이 생성됩니다.

  18. 18

    List 내의 Button에 contextMenu를 추가하면 기본 Button 기능이 방지됩니다.

  19. 19

    'Commit Retaining'을 사용하면 Firebird 성능이 저하됩니까?

  20. 20

    Oracle DB에서 필드의 데이터 유형을 변경하면 성능이 저하됩니까?

  21. 21

    백엔드 애플리케이션에 Webpack을 사용하면 성능이 저하됩니까?

  22. 22

    TableView에 항목을 동적으로 추가하면 셀이 반복됩니다.

  23. 23

    PHP에서 7 일을 추가하면 시간이 잘못 계산됩니다.

  24. 24

    Powershell이 테이블에 행을 추가하면 두 개의 테이블이 생성됩니다.

  25. 25

    CDN 호출에 "http"를 추가하면 성능 차이가 있습니까?

  26. 26

    비트 맵을 파일에 저장하면 검은 색 이미지가 생성됩니다.

  27. 27

    JSON에 사용자 지정 속성을 추가하면 중복이 생성됩니다.

  28. 28

    Vim을 통해 플랫 파일을 저장하면 새 줄을 만드는 파일에 보이지 않는 바이트가 추가됩니다.

  29. 29

    MySQL은 파일 정렬을 사용하고 성능이 저하됩니다.

뜨겁다태그

보관