derived table

Derived Table을 이용해서 NL 조인 시에 발생하는 Block Nested-Loop (BNL)를 튜닝하는 방법

이번 시간에 살펴볼 내용은 Derived Table을 이용해서 Nested Loop 조인 시에 발생하는 BNL에 대한 튜닝 방법입니다. 이 내용은 이전 포스트인 “MySQL – Block Nested-Loop (BNL)에 대한 이해 “와 연결된 내용입니다.

이번 포스팅에서 다룰 내용이 길지 않음에도 별도의 포스트로 분리한 이유는, 나름 참신한 방법으로 Nested Loop 시에 발생하는 BNL을 튜닝할 수 있는 방법이기 때문입니다. 결론부터 말하면, Derived Table의 특징을 이용하면 인덱스를 생성하지 않고도 BNL에 대한 성능 튜닝이 가능합니다. 왜냐면 TEMPTABLE 알고리즘을 이용하는 Derived Table은 조인 칼럼에 대해서 내부적으로 임시 인덱스를 생성하기 때문입니다. 이 원리를 이용하면 매우 극적인 튜닝이 가능합니다. 예제를 통해 살펴보겠습니다.

(more…)

MySQL에서 unnamed derived table 사용 시의 주의 사항

MySQL 서버팀에서 제공하는 블로그 내용을 보면 5.7부터 unnamed derived table을 처리하는 방식이 달라졌다는 내용이 있습니다. (여기 참조)
DBMS마다 용어가 달라서 조금 헷갈린대요. unnamed derived table은 ORACLE에서 말하는 in-line view, 즉, FROM 절에 나타나는 SELECT 문장을 의미합니다. 그리고 named derived table은 View입니다. 이 2가지를 통칭해서 derived table이라고 합니다. 그리고 논의의 편의를 위해서 aggregate가 없는 것을 simple한 derived table 이라고 하고, aggregate가 있는 것을 complex한 derived table이라고 하겠습니다.

(more…)