일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 타임리프
- Java
- linux
- cmd
- it
- 함수 인자값 id
- 자바스크립트 인라인
- js
- JSON
- BindingResult
- 타임리프와 스프링
- 하모니카 OS 5
- 다른사람 프로젝트 수정전 가져야할 자세
- 순서 보장
- 추천 사이트
- 룸북
- #{..}
- 설정
- 리눅스
- select
- 프로젝트 클린
- 개발시작전 자세
- 시퀀스 조회
- Test 룸북 사용하기
- 명령어
- 추천 프로그램
- Intellij
- 스프링부트
- 비밀번호 변경 명령어
- StringUtils.hasText
- Today
- Total
웹개발 블로그
DB 면접) 쿼리 튜닝 본문
쿼리 튜닝이란
데이터베이스의 성능을 향상시키기 위해 SQL 쿼리를 최적화하는 과정입니다.
데이터베이스에서 원하는 데이터를 검색할 때 실행 시간과 리소스 사용을 최소화하기 위해 쿼리의 구조를 개선하는 방법을 포함한다.
1. 💡인덱스 사용하기
CREATE INDEX idx_last_name ON employees(last_name);
SELECT * FROM employees WHERE last_name = 'Smith';
-> last_name 커럼에 대한 검색 속도가 향상된다.
2. 쿼리의 선택성 개선
3. 조인 전략 최적화
4, 서브쿼리 대신 조인 사용
5. 임시 테이블 최소화
6. 실행 계획 분석
- 지속적인 모니터링과 조정이 필요하다.
💡인덱스 잡는 조건
인덱스를 효과적으로 사용하기 위해서는 몇 가지 조건과 고려사항이 있다.
인덱스를 잘못 사용하면 오히려 성능이 저하될 수 있으므로, 다음 조건들을 고려하여 인덱스를 설정하는 것이 중요합니다.
- 인덱스 추가 : 자주 사용되는 컬럼에 인덱스를 추가하여 검색 속도를 높인다.
- 불필요한 인덱스 제거 : 사용되지 않는 인덱스를 제거하여 삽입 및 업데이트 성능을 향상시킨다.
💡자주 조회되는 컬럼
SELECT 문의 WHERE절, JOIN 조건, ORDER BY절 GROUP BY절에서 자주 사용되는 컬럼에 인덱스를 설정하면 성능향상에 큰 도움이 된다.
💡카디널리티가 높은 컬럼
카디널리티는 컬럼에 저장된 값들의 고유한 개수를 의미.
값의 종류가 많은 컬럼에 인덱스를 설정하면 검색 속도가 빨라집니다.
예를 들어, 성별과 같은 값이 적은 컬럼보다는 고객ID와 같은 값이 많은 컬럼이 더 적합
💡 큰 테이블
테이블의 데이터가 많을수록 인덱스의 효과가 큽니다.
작은 테이블에서는 인덱스의 이점이 적을 수 있습니다.
💡자주 업데이트되지 않는 컬럼
인덱스가 설정된 컬럼은 데이터를 삽입, 삭제, 업데이트할 때 추가적인 작업이 필요하므로 자주 변경되지 않는 컬럼에 인덱스를 설정하는 것이 좋다.
복합 인덱스 사용
여러 컬럼을 결합한 복합 인덱스를 사용혀면 쿼리의 성능을 더 향상 시킬 수 있다.
복합 인덱스를 설정할 때는 WHERE절에서 사용되는 칼럼의 순서를 고려해야한다.
EX) WHERE절에 "WHERE A=1 AND B=2"가 있는 경우, 인덱스는(A,B)순서로 설정하는 것이 좋다.
필터링 및 정렬에 사용되는 컬럼
자주 필터링하거나 정렬에 사용하는 컬럼에 인덱스를 설정하면 쿼리 성능을 향상시킬 수 있다.
1. 단일 인덱스 설정
CREATE INDEX idx_customer_id ON customers(customer_id);
2. 복합 인덱스 설정
CREATE INDEX idx_customer_order ON orders(customer_id, order_date);
면접질문
1. 쿼리 튜닝을 위해 무엇을 해봤는지?
2. 인덱스 잡는 조건은?
3. 속도 개선하려고 해본 방법은?