조인 예제 실행
실제로 얼마나 많은 작업이 있는지 보기 위해 가상으로 예제를 실행해 보자. 데이터베이스에 고객 10,000명이 있다고 가정하면 첫 번째 for 루프 내의 코드가 10,000번 실행될 것이다. 실행될 때마다 해당 고객의 모든 주문을 찾아본다. 만약 10,000명의 고객 각각에 평균 10개씩 주문이 있다면 for order 루프는 100,000번 실행될 것이다. 그리고 매번 실행될 때마다 주문 일자를 확인할 것이다.
작년에 20,000건의 주문이 있었다고 해보자. for order_item 루프는 20,000번 실행되면서 주문 항목에 전자제품 액세서리가 있는지 확인해 customer_set에 고객 이름을 추가할 것이다.
조인을 수행하는 한 가지 방법은 테이블에 있는 로우 수만큼 루프를 돌면서 조건에 맞는 데이터를 찾는 것이다. 이런 식의 조인은 성능을 향상시킬 수 있다. 예를 들어 작년에 발생한 모든 주문을 좀 더 빨리 찾기 위해 인덱스를 사용하는 것이다. 마찬가지로 전자제품 액세서리 카테고리에 있는 제품을 찾을 때에도 인덱스를 사용할 수 있다.
데이터베이스는 내부적으로 질의 옵티마이저를 사용해 데이터를 조인해서 가져오는 제일 나은 방법을 찾아낸다. 조회 대상 로우의 수를 줄이려고 인덱스를 사용하는 방법뿐 아니라 조건에 맞는 로우를 찾기 위해 또 다른 방법을 사용할 수도 있다. 예를 들어 조건에 맞는 값을 가진 로우를 빠르게 찾으려고 외래 키의 해시 값을 계산하는 방법도 있다.
또한, 질의 최적화기는 먼저 여러 테이블에 있는 로우들을 정렬한 다음 병합하는데, 이는 정렬되지 않았을 때보다 좀 더 효율이 높다. 이 기법은 일부 경우에는 잘 작동하지만 일부 경우에는 그렇지 않다. 현재 데이터베이스 연구자와 벤더가 질의 최적화 기술을 향상시키고 있지만, 대용량 데이터에 조인을 수행하는 것은 여전히 긴 시간과 자원을 소모하는 작업이다.