์๋น์ค ๋ด์์ ์ ์ ๋๋ค์์ ํค์๋๋ก ์ํ๋ ์ ์ ๋ฅผ ํ์ํ ์ ์์ต๋๋ค. MySQL์ ์กฐํํ๋ ์กฐ๊ฑด์ ์ LIKE ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ง๋ง ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
EXPLAIN SELECT * FROM users WHERE nickname LIKE '%nick%';
EXPLAIN ํค์๋๋ฅผ ํตํด ์คํ ๊ณํ์ ํ์ธํ๊ณ , LIKE ์ฐ์ฐ์์ ์ ๋์ด๊ฐ ์๋ค๋ฉด nickname ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ํ ์ค์บ์ด ์งํ๋จ์ ์ ์ ์์์ต๋๋ค.
์ํ ๊ฒ์์ด ์๋ ๋๋ค์ ๊ธฐ๋ฐ์ ์ ์ ๊ฒ์์ ์ฃผ์ ์๋น์ค๋ ์๋์ง๋ง, ์ ์ ๊ฐ ๋งค์ฐ ๋ง์์ก์ ๋๋ฅผ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง ๋ชปํ๋ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ์์๋์์ต๋๋ค.
์ถ๊ฐ์ ์ธ ๋ฆฌ์์ค ๋์ ๋ถ๋ด์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธธ ์ํ๊ณ MySQL์ Full Text Search์ ์ ๋์ด ๊ธฐ๋ฐ LIKE ์ฟผ๋ฆฌ, ํ์ํ ์ ์ง ์ค์์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๊ฐ๋จํ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
ALTER TABLE users ADD FULLTEXT(nickname) WITH PARSER ngram;
users ํ ์ด๋ธ์ nickname ์นผ๋ผ ํ ํ ์คํธ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
SET cte_max_recursion_depth = 1000000; // CTE ์ฌ๊ท ๊น์ด ์์
INSERT INTO users (email, password, nickname, provider, role, created_at)
WITH RECURSIVE seq AS (
SELECT 0 AS n
UNION ALL
SELECT n + 1 FROM seq WHERE n < 999999
)
SELECT
CONCAT('user', n, '@example.com') AS email,
'password123' AS password,
CONCAT(SUBSTRING(MD5(RAND()), 1, 6), n) AS nickname,
'LOCAL' AS provider,
'USER' AS role,
NOW() AS created_at
FROM seq;