반응형
dbms에서 쿼리를 날리면 데이터베이스에서는 3단계를 거친다.
- sql 파싱
- sql 최적화
- sql 실행
순서를 거치는데 간단하게 설명을 하면
- 파싱부분에서는 syntax, semantic 등의 구문오류나 대상이 올바르게 존재하는지에 대해 판단을 내리고,
- 최적화 부분에서는 옵티마이저가 실행계획을 생성한다.
- 다음은 만들어진 실행 계획에 따라 실행을 한다.
여기서 말하는 실행 계획이란 무엇인가?
sql을 데이터베이스에서 어떻게 처리할 것인가? 에 대한 것이다.
즉 해당 쿼리를 돌리기 위한 비용을 계산하고
어떤것이 가장 최적화 된 쿼리인지를 판단한다.
(비용이란 컴퓨터의 자원을 얼마나 쓰는지를 뜻한다)
인덱스가 있는 경우라던가 pk기준으로 쿼리를 짜는등의 작업이 이루어 지면 대부분 옵티마이저가 최적의 실행계획을 작성하지만,
간혹 잘못 짜거나 짜여질것을 대비하기 위해서는 옵티마이저 힌트를 사용해야한다.
select 문 안에 주석처럼 넣어서 작성을 하게 되고,
그렇게 된다면 옵티마이저는 주석을 먼저 이해하고 해당 주석에 맞게 실행계획을 작성한다.
간단한 쿼리는 시간이 얼마 차이가 안날수도 있지만 대용량이나, 복잡한 로직이 더해진다면 해당 쿼리는 더더욱 안좋은 쿼리가 되므로 옵티마이저가 만들어주는 실행계획을 완전히 맹신할수는 없다.
이렇게 하여 최적의 실행계획을 짜주는 것을
SQL튜닝 이라고 한다.
반응형
'IT > Database' 카테고리의 다른 글
Join의 종류 (38) | 2022.07.08 |
---|---|
[Mysql] 백업 및 복원 (54) | 2022.05.20 |
[Mysql] now() , sysdate() 차이 (31) | 2022.05.13 |
Key의 종류(간결 설명) (51) | 2022.04.01 |
[Mysql] database 작업 폴더 경로조회 (9) | 2021.11.26 |
댓글