IT/SQLD

[SQL Server] PROCEDURE 성능 개선

알콩달콩아빠 2024. 1. 22. 20:50
728x90
반응형

성능 개선 사항 

  • 프로시저 본문에서 'SET NOCOUNT ON'을 사용
    > 출력이 최소 수준으로 유지
  • 스키마 이름을 사용
    > 개체이름 확인 처리시간 감소 및 권한/액세스 문제 방지
  • WHERE 및 JOIN 절에서 지정한 열을 함수로 묶지 않기
    > 묶일 경우, 비결정적 열이 되어 인덱스를 사용할 수 없음
  • 대량의 행을 반환하는 SELECT문은 스칼라 함수 사용하지 않기
    > 스칼라 함수는 모든 행에 적용되어 행 기반 처리와 비슷한 동작이 발생하여 성능저하됨
  • SELECT * 사용을 피하기
    > DB엔진 오류 방지
  • 너무 많은 데이터를 처리하거나 반환하지 않기
    > 네트워크를 통해 불필요한 데이터를 보내지 않아 효율적
  • BEGIN/COMMIT 트랜잭션을 사용하여 명시적 트랜잭션을 사용하고, 짧게 유지
    > 트랜잭션이 길면 레코드 잠금시간이 길어지고 교착상태가 발생할 확률이 높아짐
  • 오류처리에 TRY...CATCH기능 사용
    > 전체 블록이 캡슐화되어, 성능 오버헤드와 프로그래밍이 줄어들고, 오류 보고서가 정확해짐
  • TABLE DDL문이 참조하는 모든 TABLE 열에 DEFAULT 키워드를 사용
    > NULL값을 허용하지 않는 열에 NULL이 전달되지 않음
  • 임시 TABLE의 각 열에 NULL 또는 NOT NULL을 사용
    > 프로시저를 실행하는 모든 연결에 대해 NULL 허용여부가 동일한 임시 테이블이 생성됨
  • NULL값을 변환하는 수정문을 사용하고, NULL 값을 포함하는 행을 쿼리에서 제거하는 논리를 포함
    > NULL은 결과 집합을 쿼리하거나 AGGREGATE 함수를 사용할 때 예기치 않은 동작을 야기
  • 고유 값에 대한 특별한 요구사항이 없을시, UNION 또는 OR 연산자 대신 UNION ALL 연산자를 사용
    > 중복되는 항목이 결과 집합에서 필터링되지 않으므로 처리 오버헤드가 감소

 

출처  : [SQL Server] PROCEDURE 성능 개선 (tistory.com)

728x90
반응형