1. 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보다 비용이 많이 듭니다.
https://connect2grp.medium.com/sql-performance-tuning-c200e7a8a556
'emotional developer > detect-server' 카테고리의 다른 글
Netflix Timestone (0) | 2023.05.30 |
---|---|
Migrating Critical Traffic At Scale with No Downtime (0) | 2023.05.15 |
JVM options in K8s (0) | 2023.05.04 |