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
SQL Outer join 2 tables
I have two tables, comp_product and comp_product_marchand. The comp_product contains product information (description, name, etc..) The comp_product_marchand contains different prices (product
stackoverflow.com
SQL IN EXISTS JOIN 성능 비교 및 용도 정리글
각종 SQL에서 데이터 조회 시 IN EXIST INNER JOIN을 사용해 조회를 하게 되는데 여기서 IN, EXIST, INNER JOIN 중 뭘 써야 성능이 가장 좋은가 싶을거다 일단 정답은 몇백~몇천건을 조회하는 정도라면 의미
wakestand.tistory.com
[SQL] WHERE 기능, 성능향상 팁 *****
WHERE 절은 "테이블내의 모든 행을 검색하는 대신 검색 조건을 지정하여 사용자가 원하는 행들만 검색하는 기능"이다. WHERE 조건식은 단일 조건식과 복수 조건식이 있다. 연산자 의 미 = 같다
link2me.tistory.com
[MSSQL] 성능 향상을 위한 팁
1. 생성시 주의사항 (1) DB 생성시 주의사항 ① DB 명칭은 해당 서비스를 파악할 수 있도록 명명한다. ...
blog.naver.com
'CS Interview > DB' 카테고리의 다른 글
DB 용어 및 개념 (2)-INDEX (0) | 2022.02.02 |
---|---|
DB 용어 및 개념 (1)-DBMS, 무결성, 정규화, UML, view (0) | 2021.05.07 |