SQL 성능개선 팁을 정리해보려 한다.
1. 인덱스 사용 시 주의사항
- 조회(SELECT, WHERE)시에는 속도에 도움을 주지만 삽입(INSERT), 갱신(UPDATE)시에는 오히려 느려진다.
- 데이터가 적은 경우에는 사용하지 않는 게 좋다.
- 조회쿼리 성능개선을 위해 WHERE 절에 자주 사용되는 컬럼은 인덱스로 지정하기도 하는데 주의할 점이 있다.
- 구간 별 선택이 많은 컬럼은 클러스터 인덱스 추천
특정 컬럼을 인덱스로 지정해도 사용할 수 없는 경우
- LIKE '%'을 변수 앞에서 사용 > 무조건 FULL SCAN
- IS NULL, IS NOT NULL 사용
- 여러컬럼에 OR 사용
- 부정비교에 사용 (예시 : NOT, <>, !=. NOT EXISTS )
- 컬럼을 변형한 경우 (예시 : substr() )
2. 데이터 추출 시 주의사항
- select에 필요한 컬럼만 지정 (select * 지양, 사용하지 않는 데이터 호출에도 부하가 발생할 수 있음)
- where 절 조건문 작성 시, 가장 많은 데이터를 걸를 수 있는 컬럼을 우선적으로 작성
- where 절 조건문 작성 시, 왼쪽은 되도록 변형되지 않은 순수 컬럼을 사용
- 정렬 (order by)하지 않고 limit, top을 사용중인지 확인
- 백만건이 넘어갈 시에는 파티셔닝을 고려
- IN < EXISTS < INNER JOIN 순으로 가독성은 떨어지지만 성능이 좋음
- 서브쿼리보다 JOIN을 지향 (상황에 따라 서브쿼리로 추출 후 조인 시 성능이 개선될 수도 있음)
- COUNT()보다 EXISTS() 지향
- COUNT()는 모든 레코드 중 관련 데이터를 필터링 한 후 함수를 수행
- EXISTS()는 필터링 시 하나라도 레코드가 있을 때 반환
추후 개선 알게되는 팁은 계속해서 추가할 예정입니닷,,
Reference
반응형
'CS Interview > DB' 카테고리의 다른 글
DB 용어 및 개념 (2)-INDEX (0) | 2022.02.02 |
---|---|
DB 용어 및 개념 (1)-DBMS, 무결성, 정규화, UML, view (0) | 2021.05.07 |