Video Conferencing, Web Conferencing, Webinars, Screen Sharing

<aside> 🧷

지난 데이터베이스를 통해 데이터베이스 일반, 설계, 트랜잭션과 락 에 대해서 알아봤습니다.

이번 시간엔 데이터베이스의 **SQL 실행절차, Index, 데이터 검색, 실행계획, join 방식**에 대해서 알아보겠습니다.

</aside>

1. SQL 실행 절차

<aside> ✏️

SQL은 어떻게 해석되어 출력되는지 SQL의 실행에 절차에 대해서 알아보겠습니다.

</aside>

  1. Parser: 쿼리 문장을 쪼개서 MySQL이 이해할 수 있도록 세분화하여 tree 형태로 만듭니다.

  1. Resolver : 쪼개진 문장을 체크합니다.
  2. * Optimizer * : tree를 탐색하며 무슨 테이블들 읽을지, 조건은 무엇인지, 어떤 인덱스를 사용할지 혹은 사용하지 않을지 선별하여 최적화시킨 후 실행 계획을 만듭니다.
  3. 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 최종 데이터를 정렬합니다.

2. Index(인덱스)


Untitled

<aside> 💡 **Index(인덱스)**는 데이터베이스에 저장된 테이블 레코드를 빠르게 탐색하기 위한 자료구조를 말합니다. 레코드를 빠르게 탐색할 수 있는 이유는 미리 **정렬**이 되어있기 때문이죠.

우리가 책에 내용을 찾을 때 순서대로 나열된 목차를 보고 내용을 찾듯이 데이터베이스도 레코드를 검색할 때 index를 통해 찾게되면 더 빠르게 찾을 수 있습니다. 즉, 검색이 빨라집니다.

반면 record의 쓰기(생성, 수정, 삭제)이 일어나면 재정렬하거나 인덱스를 추가해주는 작업이 필요하기 때문에 오히려 성능이 떨어질 수 있습니다.

무계획적인 인덱스 생성 보다는 SQL문을 효율적으로 작성 한후 인덱스 사용을 고려하시기 바랍니다!!

</aside>