안녕하세요
mysql에서 계층형 쿼리를 짜고있는데요..
일단 가장 일반적인 CTE 재귀로 원하는 값을 얻긴했습니다.
하지만 초기에는 회원 Table의 적은 ROW여서 문제가 없었지만
테스트로 7만 Row정도를 강제 Insert하고 테스트를 하니.. 너무 오래 걸려서 사용할수가 없을정도네요
코드한번 올려봅니다 조언 부탁드리겠습니다.
테이블구조는 간단합니다.
user 테이블이 존재하고
user_id , referral_code(추천인 아이디), user_name 입니다.
[테이블 데이터]
'test' , '' , '테스트'
'red', 'test', '빨강'
'blue', 'red', '블루'
'green', 'red', '초록'
[결과]
lvl , user_id , referral_code
1 test
2 red test
3 blue red
3 green red
나를 기준으로 하위의 추천인들이 레벨별로 나오고있습니다.
아래는 쿼리입니다.
[SQL 쿼리]
WITH RECURSIVE CTE AS ( SELECT user_id, referral_code, 1 AS 'lvl', user_name FROM user WHERE user_uuid = ? UNION ALL SELECT a.user_id, a.referral_code, lvl + 1 AS 'lvl', a.user_name FROM user a INNER JOIN CTE b ON a.referral_code = b.user_id ) SELECT lvl, user_id, referral_code, user_name FROM CTE;
당연히 로우가 많아질수록 성능에 문제가 있을수밖에 없다는건 알고있습니다.
하지만 어떻게 하면 더 효율적인지 많은 고수분들께 질문드립니다.
아니면.. 10대 추천인까지만 조회 등의 임시방편도 괜찮을것 같습니다.
감사합니다.