SQL 성능 튜닝
Dec 19 2022
SQL 성능 튜닝은 SQL 쿼리를 최적화하여 최대한 빨리 실행되도록 하는 프로세스입니다. 쿼리된 테이블 수, 테이블의 열 크기 및 수, 테이블의 인덱스와 같이 SQL 쿼리의 성능에 영향을 미치는 많은 요소가 있습니다.
SQL 성능 튜닝은 SQL 쿼리를 최적화하여 최대한 빨리 실행되도록 하는 프로세스입니다. 쿼리된 테이블 수, 테이블의 열 크기 및 수, 테이블의 인덱스와 같이 SQL 쿼리의 성능에 영향을 미치는 많은 요소가 있습니다.
SQL은 많은 데이터베이스 시스템의 중요한 구성 요소이며 데이터 쿼리, 업데이트 및 관리를 위한 잘 알려진 언어입니다.
SQL 성능 튜닝은 쿼리의 확장성과 속도에 도움이 되므로 숙달해야 하는 중요한 주제입니다.
이 섹션에서는 다양한 SQL 튜닝 방법을 다룹니다.
우리 모두는 항상 데이터 검색 프로세스에 대한 빠른 응답을 원합니다. 따라서 우리는 데이터 조작 중에 최상의 성능을 제공하여 애플리케이션의 최상의 성능을 제공하는 우수한 데이터베이스를 설계해야 합니다.
그러나 최고의 성능을 정의하는 직접적인 방법은 없지만 인덱스 생성, 조인 사용, JOIN을 사용하기 위한 하위 쿼리 재작성 등과 같은 다양한 범주에 속하는 SQL 쿼리 성능을 개선하는 여러 가지 방법을 선택할 수 있습니다.
개발자로서 우리는 모든 SQL 쿼리가 여러 가지 방법으로 작성될 수 있다는 것을 알고 있지만 더 나은 쿼리 성능을 달성하려면 모범 사례/기술을 따라야 합니다. 그 중 일부는 아래에 강조 표시되어 있습니다.
- IN 대신 EXISTS를 사용하여 데이터의 존재를 확인하십시오.
2. SELECT 문에서 *를 사용하지 마십시오. 필요한 열의 이름을 지정하십시오.
3. 적절한 데이터 유형을 선택합니다. 예를 들어 문자열을 저장하려면 텍스트 데이터 유형 대신 varchar를 사용하십시오. 큰 데이터(8000자 이상)를 저장해야 할 때마다 텍스트 데이터 유형을 사용하십시오.
4. 두 데이터 유형 모두 char 및 varchar만큼 이중 메모리를 사용하므로 가능하면 nchar 및 nvarchar를 사용하지 마십시오.
5. 고정 길이 필드에서 NULL을 피하십시오. NULL이 요구되는 경우에는 NULL에 대한 공간을 적게 차지하는 가변 길이(varchar) 필드를 사용하십시오.
6. 절을 피하십시오. 집계 결과를 추가로 필터링하려면 having 절이 필요합니다.
7. 클러스터형 및 비클러스터형 인덱스를 만듭니다.
8. 클러스터형 인덱스에서 사용되는 필드가 비클러스터형 인덱스에서도 사용될 수 있으므로 클러스터형 인덱스를 작게 유지하십시오.
9. 대부분의 선택적 열은 비클러스터형 인덱스의 키에서 가장 왼쪽에 배치해야 합니다.
10. 사용하지 않는 인덱스를 삭제합니다.
11. 문자 대신 정수 값이 있는 열에 인덱스를 만드는 것이 좋습니다. 정수 값은 문자 값보다 적은 오버헤드를 사용합니다.
12. 하위 쿼리 대신 조인을 사용하십시오.
13. 조인으로 생성되는 결과 테이블의 크기를 제한하려면 WHERE 식을 사용하십시오.
14. 테이블에 삽입할 때 TABLOCKX를 사용하고 병합할 때 TABLOCK을 사용하십시오.
15. 테이블에서 데이터를 쿼리하는 동안 WITH(NOLOCK)를 사용합니다.
16. SET NOCOUNT ON을 사용하고 TRY-CATCH를 사용하여 교착 상태를 피하십시오.
17. 커서는 성능이 매우 느리므로 커서를 사용하지 마십시오.
18. 임시 테이블 대신 테이블 변수를 사용하십시오. Temp 테이블을 사용하려면 시간이 많이 걸리는 작업인 TempDb 데이터베이스와의 상호 작용이 필요했습니다.
19. 가능하면 UNION 대신 UNION ALL을 사용하십시오.
20. SQL 개체 이름 앞에 스키마 이름을 사용합니다.
21. 자주 사용하는 데이터와 더 복잡한 쿼리에는 저장 프로시저를 사용하십시오.
22. 트랜잭션이 처리 테이블 데이터를 잠그고 교착 상태가 발생할 수 있으므로 트랜잭션을 가능한 작게 유지하십시오.
23. 사용자 정의 저장 프로시저 이름을 접두사 "sp_"로 사용하지 마십시오. SQL 서버는 먼저 마스터 데이터베이스에서 사용자 정의 프로시저를 검색한 다음 현재 세션 데이터베이스에서 검색하기 때문입니다.
24. 상관 관계가 없는 스칼라 하위 쿼리를 사용하지 마십시오. 이 쿼리를 기본 쿼리의 일부가 아닌 별도의 쿼리로 사용하고 출력을 변수에 저장합니다. 이 변수는 기본 쿼리 또는 일괄 처리의 이후 부분에서 참조할 수 있습니다.
25. 다중 문 테이블 값 함수(TVF)를 피하십시오. 다중 문 TVF는 인라인 TVF보다 비용이 많이 듭니다.
위에서 본 것처럼 SQL Server에는 쿼리 및 데이터베이스의 성능을 전체적으로 향상시키기 위해 수행할 수 있는 몇 가지 단계가 있습니다. ORACLE과 같은 다른 RDBMS에도 적용할 수 있는 많은 단계가 있습니다.
- EXPLAIN PLAN 또는 AUTOTRACE를 사용하여 쿼리의 실행 계획을 분석하고 쿼리 실행 방식과 관련된 문제를 식별합니다.
- INDEX 힌트를 사용하여 특정 쿼리에 대해 최적화 프로그램에서 사용해야 하는 인덱스를 지정합니다.
- FULL 또는 INDEX_FFS와 같은 힌트를 사용하여 옵티마이저가 각각 전체 테이블 스캔 또는 인덱스 빠른 전체 스캔을 사용하도록 강제하는 것을 고려하십시오.
- 쿼리에 대한 특정 최적화 모드를 지정하려면 OPTIMIZER_MODE 힌트를 사용하십시오.
- 구체화된 뷰를 사용하여 자주 액세스하는 데이터를 미리 계산하고 저장하면 해당 데이터에 액세스하는 쿼리의 성능을 향상시킬 수 있습니다.
- DBMS_STATS 패키지를 사용하여 데이터베이스 및 개체에 대한 통계를 분석하고 수집하면 실행 계획을 생성할 때 옵티마이저가 보다 정보에 입각한 결정을 내리는 데 도움이 될 수 있습니다.
- 파티셔닝을 사용하여 큰 테이블을 더 작고 관리하기 쉬운 조각으로 나누면 해당 테이블에 액세스하는 쿼리의 성능을 향상시킬 수 있습니다.
- SQL Tuning Advisor를 사용하여 SQL 문의 잠재적인 성능 문제를 식별하고 수정합니다.
- 이는 Oracle SQL 쿼리 및 데이터베이스의 성능을 향상시키기 위해 사용할 수 있는 많은 기술 중 일부에 불과합니다. 취해야 할 특정 단계는 특정 데이터베이스 및 워크로드에 따라 다르다는 점을 염두에 두는 것이 중요합니다.
- 성능 문제가 있는 경우 항상 데이터베이스 관리자나 다른 전문가와 상의하는 것이 좋습니다.
연휴 동안 Google Cloud로 GCP를 무료로 배우는 다양한 방법
이해 하기
행복한 독서…..행복한 학습!

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































