์๋
ํ์ธ์, ๋ฉํฐ์ปฌ๋ผ์ธ๋ฑ์ค ๊ฐ๋
ํ๋ฐ๋ถ ๋ด์ฉ์ด ์ดํด๊ฐ ๊ฐ์ง ์์ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ๋ฆ์ง ์๊ฒ ๋ต๋ณ ์ฃผ์
์ ๊ด์ฐฎ์์!๊ทธ๋์ ์ ๊ฐ ์๊ฒ๋ ์ ๊ณผ ํจ๊ป ์กฐ๊ธ ๋ ํ์ด์..์ค๋ช
์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ง๋ฌธ ์๋๊ฐ ์ ํด์ง์ง ์์๋ ๊ฒ ๊ฐ์์ ์ ๊ฐ ์์ ๊ฐ์ ์ค๋ฌด ์ํฉ์ด๋ผ๋ฉด two_field์ ๋จ์ผ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ์ ๊ฑฐ์์.๊ทธ๋ฌ๋, ์ง๋ฌธ๋๋ฆฌ๊ณ ์ถ์ ์ ์ mysql์์ ์คํ ๊ณํ์ ์ ํ ๋์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ ๋ ๋ ํจ์จ์ ์์๋ ๋ถ๊ตฌํ๊ณ ํ์ค์บ์ ํ๋ ์ด์ ๊ฐ ์๋์ง์
๋๋ค. ์ ๊ฐ ํ๋ ํ
์คํธ๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.์ ํ
์ด๋ธ์ ์์ฉํด์ ์ปฌ๋ผ ๊ฐ์๊ฐ ๋ง๊ณ , row๋น ๋ฐ์ดํฐ๊ฐ ํฐ ํ
์ด๋ธ์ ์์ฑํ์ต๋๋ค.CREATE TABLE test1 ( seq INT PRIMARY KEY AUTO_INCREMENT, one_field BIGINT, two_field BIGINT, hash_email1 VARCHAR(700) not null default "", hash_email2 VARCHAR(700) not null default "", hash_email3 VARCHAR(700) not null default "", hash_email4 VARCHAR(700) not null default "", hash_email5 VARCHAR(700) not null default "", hash_email6 VARCHAR(700) not null default "", hash_email7 VARCHAR(700) not null default "", hash_email8 VARCHAR(700) not null default "", hash_email9 VARCHAR(700) not null default "", hash_email10 VARCHAR(700) not null default "", INDEX idx_hash_email (hash_email), -- ํด์ ์ธ๋ฑ์ค, INDEX idx_col1_col2 (one_field, two_field) -- ๋ณตํฉ ์ธ๋ฑ์ค ); ์ ํ
์ด๋ธ์ ์์ฑํด์ฃผ์ ์ฌ๊ท๋ฌธ์ ํตํด ์ฝ 300๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , two_field = 2์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฑ ํ๋ ์ฝ์
ํ์์ต๋๋ค.SET @@cte_max_recursion_depth = 100000; -- 30๋ฒ ์ํ INSERT INTO test1 (one_field, two_field) WITH RECURSIVE my_cte AS ( SELECT 1 AS n, CAST(1 AS DOUBLE) AS abc, CAST(3 AS DOUBLE) AS se UNION ALL SELECT 1+n, CAST(1+n AS DOUBLE), CAST(3+n AS DOUBLE) FROM my_cte WHERE n ํด๋น ํ
์ด๋ธ์ 300๋ง + 1๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๊ณ , ์ฝ 300mb์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ด ์ํ์์ ์กฐํ๋ฌธ์ ๋ ๋ ค๋ณด์์ต๋๋ค.-- 1. explain ๊ฒฐ๊ณผ : type = INDEX (์ธ๋ฑ์ค ํ์ค์บ) SELECT seq, one_field, two_field FROM test1 WHERE two_field = 2; -- 2. explain ๊ฒฐ๊ณผ : type = ALL (ํ์ค์บ) SELECT * FROM test1 WHERE two_field = 2;์ 2๋ฒ ์ฟผ๋ฆฌ๋ ์ฌ์ ํ ํ์ค์บ์ด ๋ฐ์ํ์๋๋ฐ์,์ ์๊ฐ์ (๋น๋ก two_field๊ฐ ์ ํ์ด ์๋์ง๋ผ๋) 1๋ฒ ์ฟผ๋ฆฌ์ฒ๋ผ idx_col1_col2 ์ธ๋ฑ์ค๋ฅผ ํ์ two_field = 2์ธ ๋ฐ์ดํฐ์ seq(primary key) ๊ฐ์ ์ฐพ์๋ธ ํ, ๊ทธ๋ฅผ ํตํด ์ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ฉด ํ์ค์บ์ ๋นํด ์๊ฐ์ ๋ํญ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์์ต๋๋ค. ์ค์ ๋ก ์ 2๋ฒ ์ฟผ๋ฆฌ๋ ์ ํ๊ฒฝ์์ ์ฝ 2์ด์ ์ํ ์๊ฐ์ด ๊ฑธ๋ ธ๋๋ฐ์,-- 3. explain ๊ฒฐ๊ณผ : ์๋ธ์ฟผ๋ฆฌ type = INDEX, ๊ทธ ์ดํ ๋ฉ์ธ์ฟผ๋ฆฌ type = CONST SELECT * FROM test1 WHERE seq = (SELECT seq FROM test6 WHERE two_field = 2);์์ ๊ฐ์ด ๋ช
์์ ์ผ๋ก ๋ณธ ์ง๋ฌธ ์๋์ ๊ฐ์ด ์์ฑํ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ณด๋ฉด ์ฝ 0.5์ด๋ก ์ํ ์๊ฐ์ด ๋ง์ด ์ค์ด๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. ์ฒ์ ์ง๋ฌธํ๋ ์๋๋ 3๋ฒ ์ฟผ๋ฆฌ์ ๊ฐ์ด ์ํํ๋ฉด ๋ ํจ์จ์ ์์๋ ๋ถ๊ตฌํ๊ณ ํ์ค์บ์ ํ๋ ์ด์ ๊ฐ ๋ฐ๋ก ์๋์ง ์ฌ์ญค๋ณธ ๊ฒ์ด์์ด์.์ข ๋ ์ฐพ์๋ด์ผ๊ฒ ์ง๋ง ์ง๋ฌธํ๋ฉด์ ๋ ์๊ฐ์, ์ด ์ ๋ ํ๋์ mysql์์ ์ง์ํ๋ ์์ญ์ด ์๋ ๊ฐ๋ฐ์๊ฐ ํด์ผํ๋ ์์ญ์ด๋ผ๋ ์๊ฐ์ด ๋๋ค์๋ต๋ณ ์ฃผ์ ๊ฒ์ฒ๋ผ ์ ์ด์ two_field๋ฅผ ์ ํ์ผ๋ก ๊ฐ๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ ์ผ์ด๊ธฐ๋ ํ๋๊น์