Post

Temp Table

Temp Table

๐Ÿ“‹ Table of contents

  1. ๋“ค์–ด๊ฐ€๋ฉฐ
  2. Temp Table์ด๋ž€?
  3. ์ ์šฉํ•ด๋ณด๊ธฐ



๐Ÿ‘€ ๋“ค์–ด๊ฐ€๋ฉฐ

โ€œํ•™๋ฌธ์—๋Š” ๋์ด ์—†๋‹ค.โ€



๐Ÿค” Temp Table์ด๋ž€?

์ •์˜

Temp Table์ด๋ž€, DB ์„ธ์…˜ ๋™์•ˆ๋งŒ ์กด์žฌํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ๋งŒ ์กด์žฌํ•˜๋ฉฐ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค.

์œ ํ˜•

  • Local Temporary Tables: ํ˜„์žฌ ์„ธ์…˜์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • Global Temporary Tables: ์—ฌ๋Ÿฌ ์„ธ์…˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ (๋ฐ์ดํ„ฐ๋Š” ์„ธ์…˜๋ณ„๋กœ ๋…๋ฆฝ์ )

ํŠน์ง•

  • ์ผ์‹œ์  ์ €์žฅ: ์ž„์‹œ ํ…Œ์ด๋ธ”์€ ์„ธ์…˜ ๋‹จ์œ„๋กœ ์กด์žฌํ•˜๋ฉฐ, ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•  ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์ผ๋ฐ˜ ํ…Œ์ด๋ธ”๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฟผ๋ฆฌ๋‚˜ ๋ณต์žกํ•œ ์กฐ์ธ ์ž‘์—…์—์„œ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋””์Šคํฌ I/O ์ ˆ์•ฝ: ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด๋‚˜ ์ฒ˜๋ฆฌ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•ด๋‘๋ฉด ๋””์Šคํฌ I/O๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ DB ๋ถ€ํ•˜ ๊ฐ์†Œ์—๋„ ๋„์›€์ด ๋œ๋‹ค.

    ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์šฐ๋ ค๋„ ์ ๋‹ค๋Š” ์ ์ด ์žฅ์ ์ด๋‹ค. ๋˜ํ•œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์—์„œ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ

  1. ์„ธ์…˜ ์ข…๋ฃŒ ์‹œ ์ž๋™ ์‚ญ์ œ๋˜๋ฏ€๋กœ ์ค‘์š” ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ ํ…Œ์ด๋ธ”์— ์ €์žฅ
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„๋ณ„๋กœ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ
  3. ๊ณผ๋„ํ•œ ์‚ฌ์šฉ์€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ์Œ



โœ… ์ ์šฉํ•ด๋ณด๊ธฐ

์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€

  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ์ €์žฅ
  • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์ž„์‹œ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ ์ •์ œ ์ž‘์—…
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”

์ฟผ๋ฆฌ ์˜ˆ์‹œ

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์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

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;
This post is licensed under CC BY 4.0 by the author.

Trending Tags