임시 테이블이 MEMORY (HEAP) 테이블로 물리 메모리에 생성되는 경우에도 주의해야 할 사항이 있다. MEMORY (HEAP) 테이블의 모든 칼럼은 고정 크기 칼럼이라는 점이다.......이러한 임시 테이블의 저장 방식 때문에 SELECT하는 칼럼은 최소화하고(특히 불필요하면 BLOB 이나TEXT 칼럼은 배제하는 것이 좋음), 칼럼의 데이터 타입 선정도 가능한 한 작게 해주는 것이 좋다. - P358
레코드 건수가 많지 않으면 내부 임시 테이블이 메모리에 생성되고 MySQL의 서버의 부하에 크게 영향을 미치지는 않는다. 성능상의 이슈가 될만한 부분은 내부 임시 테이블이 MyISAM 테이블로 디스크에 생성되는 경우다. - P357
임시테이블이 필요한 쿼리- ORDER BY와 GROUP BY에 명시된 칼럼이 다른 쿼리- ORDER BY나 GROUP BY에 명시된 칼럼이 조인의 순서상 첫 번째 테이블이 아닌 쿼리- DISTINCT와 ORDER BY가 동시에 쿼리에 존재하는 경우 또는 DISTINCT가 인덱스로 처리되지 못하는 쿼리. - UNION이나 UNION DISTINCT가 사용된 쿼리(select_type 칼럼이 UNION RESULT인 경우)- UNION ALL이 사용된 쿼리(select_type 칼럼이 UNION RESULT인 경우)- 쿼리의 실행 계획에서 select_type DERIVED인 쿼리. - P354
집합 함수가 없는 SELECT 쿼리에서 DISTINCT는 조회하는 모든 칼럼의 조합이 유니크한 것들만 가져온다. 하지만 집합 함수 내에서 사용된 DISTINCT는 그 집합 함수의 인자로 전달된 칼럼 값들 중에서 중복을 제거하고 남은 값만을 가져온다. - P352
DISTINCT를 사용할 때 자주 실수하는 것이 있다. DISTINCT는 SELECT하는 레코드(튜플)를 유니크하게 SELECT하는 것이지 칼럼을 유니크하게 조회하는 것이 아니다. - P351