Temp Table
๐ Table of contents
๐ ๋ค์ด๊ฐ๋ฉฐ
โํ๋ฌธ์๋ ๋์ด ์๋ค.โ
๐ค Temp Table์ด๋?
์ ์
Temp Table์ด๋, DB ์ธ์ ๋์๋ง ์กด์ฌํ์ฌ ์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ์์ ํ ์ด๋ธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋์๋ง ์กด์ฌํ๋ฉฐ ์์ ์ด ๋๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๊ฑฐ๋ ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ์ฌ๋ผ์ง๋ค.
์ ํ
- Local Temporary Tables: ํ์ฌ ์ธ์ ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- Global Temporary Tables: ์ฌ๋ฌ ์ธ์ ์์ ์ ๊ทผ ๊ฐ๋ฅ (๋ฐ์ดํฐ๋ ์ธ์ ๋ณ๋ก ๋ ๋ฆฝ์ )
ํน์ง
- ์ผ์์ ์ ์ฅ: ์์ ํ ์ด๋ธ์ ์ธ์ ๋จ์๋ก ์กด์ฌํ๋ฉฐ, ์ธ์ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ๋ช ์์ ์ผ๋ก ์ญ์ ํ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ์ฑ๋ฅ ์ต์ ํ: ์ผ๋ฐ ํ ์ด๋ธ๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฟผ๋ฆฌ๋ ๋ณต์กํ ์กฐ์ธ ์์ ์์ ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
- ๋์คํฌ I/O ์ ์ฝ: ๋ณต์กํ ๊ณ์ฐ์ด๋ ์ฒ๋ฆฌ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ
์ด๋ธ์ ์ ์ฅํด๋๋ฉด ๋์คํฌ I/O๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ผ๋ฉฐ DB ๋ถํ ๊ฐ์์๋ ๋์์ด ๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ฉฐ ๋์์ฑ ๋ฌธ์ ์ ๋ํ ์ฐ๋ ค๋ ์ ๋ค๋ ์ ์ด ์ฅ์ ์ด๋ค. ๋ํ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์์ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ๋ค.
์ฃผ์ ์ฌํญ
- ์ธ์ ์ข ๋ฃ ์ ์๋ ์ญ์ ๋๋ฏ๋ก ์ค์ ๋ฐ์ดํฐ๋ ์๊ตฌ ํ ์ด๋ธ์ ์ ์ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง๋ณ๋ก ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ์ด ๋ค๋ฅผ ์ ์์
- ๊ณผ๋ํ ์ฌ์ฉ์ ์์คํ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ ์ ์์
โ ์ ์ฉํด๋ณด๊ธฐ
์ฃผ์ ํ์ฉ ์ฌ๋ก
- ๋ณต์กํ ์ฟผ๋ฆฌ์ ์ค๊ฐ ๊ฒฐ๊ณผ ์ ์ฅ
- ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์์ ์ ์ฅ
- ๋ฐ์ดํฐ ์ ์ ์์
- ์ฑ๋ฅ ์ต์ ํ
์ฟผ๋ฆฌ ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- PostgreSQL
CREATE TEMP TABLE temp_users (
id INTEGER,
name VARCHAR(50)
);
-- Oracle
CREATE GLOBAL TEMPORARY TABLE temp_users (
id NUMBER,
name VARCHAR2(50)
);
-- SQL Server
CREATE TABLE #temp_users (
id INT,
name VARCHAR(50)
);
์ค์ ์ ์ฉ
์ฐ๋ฆฌ ํํธ์์๋ง DB์ ์ ๊ทผํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ํ ์์ญ์์๋ ๋์๊ฐ๋์ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด๋ก ์ฒ๋ฆฌํ ๊ฒฝ์ฐ DB Lock์ด ๊ฑธ๋ฆด ์ ์๋ค.
์ด์ ๋ณต์กํ ์ฟผ๋ฆฌ ์์ ์ ๋ํ์ฌ ๋จ๊ณ์ ๋จ๊ณ ์ฌ์ด์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก Temp Table์ ์ฌ์ฉํ๋ค. ์ ์ฅํ ๋ฐ์ดํฐ๋ก ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ์ ์ฉํ๊ธฐ๋ ํ๊ณ DB์ ์ํฅ๋ ์ ๊ฒ ์ค ์ ์์๋ค.
์ค์ ์ ์ฉ ์ฝ๋๋ฅผ ๊ฐ์ํ ํ ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- ์์ ํ
์ด๋ธ ์์ฑ
CREATE TEMP TABLE temp_cmdt (
cmdt_id VARCHAR(13),
temp_ysno CHAR(1)
);
-- ์์ ๋ฐ์ดํฐ ์ฝ์
INSERT INTO temp_cmdt (cmdt_id, temp_ysno)
SELECT t2.cmdt_id, 'N' AS temp_ysno
FROM dev.table_1 t1
LEFT JOIN dev.table_2 t2
ON t1.sale_id = t2.sale_id
WHERE t1.cmdt_code IN ('001', '003')
AND t2.cmdt_id IS NOT NULL;
-- ์์ ํ
์ด๋ธ ์ฌ์ฉ
SELECT *
FROM temp_cmdt;
-- ์์
์๋ฃ ํ ์ญ์
DROP TABLE temp_cmdt;