보라코딩

MySQL 옵티마이저 본문

코딩/DB

MySQL 옵티마이저

new 보라 2024. 6. 28. 20:23

 

드라이빙 테이블

 

드라이빙 테이블(Driving Table)은 SQL 조인(query join)에서 쿼리 최적화를 위해 중요한 개념입니다. 드라이빙 테이블은 조인에서 가장 먼저 읽히는 테이블을 의미하며, 이를 기반으로 다른 테이블들과의 조인이 이루어집니다. 드라이빙 테이블을 잘 선택하면 쿼리 성능을 크게 향상시킬 수 있습니다.

 

MySQL에서 드라이빙 테이블 선택하기

MySQL의 쿼리 최적화는 주로 쿼리 옵티마이저(Query Optimizer)에 의해 자동으로 수행됩니다. 하지만 때로는 쿼리 힌트를 사용하여 드라이빙 테이블을 명시적으로 지정할 수 있습니다.

 

성능 최적화 예시

예를 들어, 두 개의 테이블 orders와 customers가 있다고 가정해봅시다. orders 테이블이 크고, customers 테이블이 작다고 할 때, 작은 customers 테이블을 드라이빙 테이블로 선택하여 필터링을 먼저 수행하고, 이를 기반으로 큰 orders 테이블과 조인하면 성능이 향상될 수 있습니다.

 

 

 

정렬 처리 방법에 따른 성능 비교

 

1. 인덱스를 사용한 정렬

인덱스를 사용한 정렬은 데이터베이스 인덱스를 사용하여 정렬을 최적화하는 방법입니다. 인덱스가 적절히 설계되어 있으면, 정렬이 필요한 쿼리에서 인덱스를 활용하여 빠르게 데이터를 검색하고 정렬할 수 있습니다.

 

2. 조인의 드라이빙 테이블만 정렬

조인의 드라이빙 테이블만 정렬하는 방법은 조인에서 가장 먼저 읽히는 테이블(드라이빙 테이블)만 정렬하고, 이를 기반으로 나머지 테이블과 조인을 수행하는 방법입니다. 이 접근 방식은 초기 데이터셋을 줄여 후속 조인 작업의 효율성을 높입니다.

 

3. 임시 테이블을 사용한 정렬

임시 테이블을 사용한 정렬은 데이터를 임시 테이블에 저장하고, 이 임시 테이블에서 데이터를 정렬하여 사용하는 방법입니다. 대규모 데이터 정렬 작업에서 자주 사용됩니다.

 

성능 비교

  1. 인덱스를 사용한 정렬은 가장 빠르고 효율적이며, 인덱스가 적절히 설계되어 있을 때 최고의 성능을 발휘합니다. 하지만 인덱스 관리 비용과 저장 공간이 필요합니다.
  2. 조인의 드라이빙 테이블만 정렬은 초기 필터링이 효율적으로 수행되지만, 복잡한 조인에서 다중 정렬이 필요할 수 있어 성능이 떨어질 수 있습니다. 하지만 메모리 사용을 최적화할 수 있는 장점이 있습니다.
  3. 임시 테이블을 사용한 정렬은 복잡한 쿼리를 처리할 때 유용하지만, 추가적인 디스크 I/O와 메모리 사용으로 인해 성능이 저하될 수 있습니다. 대규모 데이터 정렬 시에는 유용하지만, 일반적으로 가장 느린 방법입니다.

'코딩 > DB' 카테고리의 다른 글

sqld 공부했던 자료.zip  (0) 2024.11.20
MySQL 성능 최적화  (1) 2024.07.23
Postgres 장점 (MVCC)  (0) 2024.06.13
docker로 oracle 사용하기  (0) 2023.10.15
몽고DB 설치  (0) 2023.08.25