Video Conferencing, Web Conferencing, Webinars, Screen Sharing
<aside> 🧷
지난 데이터베이스를 통해 데이터베이스 일반, 설계, 트랜잭션과 락 에 대해서 알아봤습니다.
이번 시간엔 데이터베이스의 **SQL 실행절차, Index, 데이터 검색, 실행계획, join 방식**에 대해서 알아보겠습니다.
</aside>
<aside> ✏️
SQL은 어떻게 해석되어 출력되는지 SQL의 실행에 절차에 대해서 알아보겠습니다.
</aside>

Parser: 쿼리 문장을 쪼개서 MySQL이 이해할 수 있도록 세분화하여 tree 형태로 만듭니다.
Resolver : 쪼개진 문장을 체크합니다.* Optimizer * : tree를 탐색하며 무슨 테이블들 읽을지, 조건은 무엇인지, 어떤 인덱스를 사용할지 혹은 사용하지 않을지 선별하여 최적화시킨 후 실행 계획을 만듭니다.Query execution : 최적화된 실행 계획을 기반으로 스토리지 엔진으로부터 데이터를 가져옵니다.<aside> ✏️
실제로 수행되는 절(Clause) 단위 수행 절차는 아래와 같습니다.
</aside>
5. SELECT department_id,
COUNT(*) AS employee_count,
AVG(salary) AS average_salary
1. FROM employees
2. WHERE hire_date >= '2020-01-01'
AND status = 'ACTIVE'
3. GROUP BY department_id
4. HAVING COUNT(*) > 5
5. ORDER BY average_salary DESC
6. LIMIT 10;
| 순서 | 절(Clause) | 설명 |
|---|---|---|
| 1 | from | 주 테이블 선택합니다. |
| 2 | where | 기본 데이터를 필터링합니다. |
| 3 | group by | 기본 데이터를 집계합니다. |
| 4 | having | 집계된 데이터를 필터링합니다. |
| 5 | select | 최종 데이터를 반환합니다. |
| 6 | order by | 최종 데이터를 정렬합니다. |

<aside>
💡 **Index(인덱스)**는 데이터베이스에 저장된 테이블 레코드를 빠르게 탐색하기 위한 자료구조를 말합니다. 레코드를 빠르게 탐색할 수 있는 이유는 미리 **정렬**이 되어있기 때문이죠.
우리가 책에 내용을 찾을 때 순서대로 나열된 목차를 보고 내용을 찾듯이 데이터베이스도 레코드를 검색할 때 index를 통해 찾게되면 더 빠르게 찾을 수 있습니다. 즉, 검색이 빨라집니다.
반면 record의 쓰기(생성, 수정, 삭제)이 일어나면 재정렬하거나 인덱스를 추가해주는 작업이 필요하기 때문에 오히려 성능이 떨어질 수 있습니다.
무계획적인 인덱스 생성 보다는 SQL문을 효율적으로 작성 한후 인덱스 사용을 고려하시기 바랍니다!!
</aside>