Temporary Table 이란?
MySQL 단일 세션에서 여러번 사용할 수 있는 데이터 집합을 임시적으로 저장해둔 테이블을 칭한다.
일례로, 대용량의 데이터가 저장된 테이블에서 특정 값들만 추출하여 간결하게 보려고 할 때, 해당 테이블 전체를 활용하게 되면 성능이나 비용 부분에서 부담이 생길 경우가 생길 수 있다.
이 때 Temporary Table을 이용하여 간결하게 데이터를 활용할 수 있다.
Temporary Table 특징
- 테이블 생성시 CREATE TEMPORARY TABLE \테이블명\ 의 구조를 가진다.
- Temporary Table의 경우 해당 테이블을 생성한 클라이언트 단에서만 확인이 가능하다
- 서로 다른 클라이언트와 이름이 중복되어도 오류없이 생성 가능하나, 동일한 세션에서 이름이 중복될 수 없다.
- 또한 일반 테이블과 같은 이름을 가질 수 있으나 권장되지 않는다. 만약 같은 이름의 Temporary Table을 생성한 경우 기존의 테이블에서의 엑세스 할 수 없게되며, Temporary Table을 삭제하여 다시 엑세스할 수 있다.
그러나 사용하며 혼란을 야기하거나, 데이터 손실이 따를 수 있으므로 다른 이름을 사용하도록 한다.
- 테이블 삭제는 세션이 종료 혹은 연결이 종료되면 자동으로 삭제된다.
- DROP TEMPORARY TABLE \테이블명\ 로 삭제도 가능하다.
- 이 때, TEMPORARY 를 사용하지 않아도 삭제할 수 있으나, 같은 이름의 Temporary가 아닌 일반 테이블이 존재하는 경우 해당 테이블이 삭제될 수 있으므로 TEMPORARY 와 함께 명시하여 삭제하도록한다.
Temporary Table 쿼리 예시
-- Case 1
CREATE TEMPORARY TABLE temp_employee
(EmployeeId int
,JobTitle varchar(50)
,Salary int);
INSERT INTO temp_employee
SELECT *
FROM SQLTutorial.employeeSalary
WHERE Salary > 36000;
DROP TEMPORARY TABLE temp_employee;
- TEMPORARY 명령어와 함께 컬럼명, 데이터 타입을 명시하여 테이블을 생성한다.
- INSERT 문으로 VALUES를 직접 삽입할 수도 있고, 원하는 기존 테이블의 데이터를 추출하여 Temporary Table의 데이터를 삽입하여 활용할 수 있다.
- 사용을 완료한 Temporary Table은 세션 혹은 연결 종료로 삭제할 수 있고 예시 코드와 같이 TEMPORARY 명령어와 함께 테이블을 삭제할 수 있다.
-- Case 2
CREATE TEMPORARY TABLE temp_demo
SELECT *
FROM employeeDemograhpics
WHERE gender = 'Female';
SELECT *
FROM temp_demo;
- Temporary Table 생성과 동시에 원하는 기존 테이블의 데이터를 추출하여 Temporary Table의 데이터를 삽입하여 활용할 수 있다.
Temporary Table 확인
MySQL은 임시 테이블이 있는지 직접 확인하는 기능이나 명령문을 제공하지 않는다.
프로시저 등을 활용하여 확인하는 방법이 있으나, 프로시저는 다음 포스팅에서 다루고자 한다.
(혹 프로시저를 활용하여 확인하고자 한다면, https://www.mysqltutorial.org/mysql-temporary-table/ 참고)
Resource
https://www.mysqltutorial.org/mysql-temporary-table/
+ 실제 사용 사례
https://sanghye.tistory.com/23
+ Temporary Table 관리
https://www.percona.com/blog/mysql-disk-space-exhaustion-for-implicit-temporary-tables/
'Study > SQL' 카테고리의 다른 글
PostgreSQL | Codility | SqlWorldCup (0) | 2023.03.06 |
---|---|
PostgreSQL | Codility | SqlEventsDelta (0) | 2023.03.06 |
MySQL | HackerRank | Ollivander's Inventory (0) | 2023.02.07 |
MySQL | HackerRank | Top Earners (0) | 2023.02.06 |
MySQL | HackerRank | Top Competitors (0) | 2023.01.31 |