[SQL] 연관 관계가 있는 더미 데이터 생성하기

2024. 11. 13. 03:32·Backend&DB

API 성능 테스트를 위한 더미 데이터를 생성하는 과정이다.

처음에는 조회 대상인 suggestion만 10만개를 만들었는데,
10만개의 suggestion에 동일한 FK(member_key, position_id)를 넣는 실수를 했다.
그 결과 당연히 원하는 테스트 결과가 나오지 않았다.

-> 중복된 member, position을 조회하며 fetch join 적용했을 때 더 느림

실제 프로덕션 환경에서는 member, company, position, suggestion의 연결이 제각각일 것이기에
member, company, position, suggestion을 모두 10만개씩 생성하며, 생성 과정에서 FK를 랜덤으로 선택하도록 SQL을 짰다. 

 

생성 코드

DELIMITER $$

DROP PROCEDURE IF EXISTS loopInsert$$

CREATE PROCEDURE loopInsert()
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= 100000 DO
        -- 1. member 생성
        INSERT INTO member (
            created_date,
            modified_date,
            email,
            member_key,
            name,
            nickname,
            role,
            social_type,
            tid
        )
        VALUES (
            NOW(),  -- created_date
            NOW(),  -- modified_date
            CONCAT('email', i, '@example.com'),  -- email
            REPLACE(UUID(), '-', ''),  -- member_key
            CONCAT('Member', i),  -- name
            CONCAT('Nick', i),  -- nickname
            'USER',  -- role
            'KAKAO',  -- social_type
            i -- tid
        );

        -- 2. company 생성
        INSERT INTO company (
            id,
            created_date,
            modified_date,
            company_name,
            industry_type
        )
        VALUES (
            UNHEX(REPLACE(UUID(), '-', '')),  -- id
            NOW(),  -- created_date
            NOW(),  -- modified_date
            CONCAT('Company', i),  -- company_name
            JSON_ARRAY('Tech', 'Finance')  -- industry_type (산업 분야 예시)
        );

        -- 3. position 생성
        INSERT INTO position (
            id,
            created_date,
            modified_date,
            company_id,
            position_name,
            support_languages,
            is_official
        )
        VALUES (
            UNHEX(REPLACE(UUID(), '-', '')),  -- id
            NOW(),  -- created_date
            NOW(),  -- modified_date
            (SELECT id FROM company ORDER BY RAND() LIMIT 1),  -- 랜덤 company_id
            CONCAT('Position', i),  -- position_name
            JSON_ARRAY('Java', 'Python', 'JavaScript'),  -- support_languages
            TRUE  -- is_official
        );

        -- 4. suggestion 생성
        INSERT INTO suggestion (
            id,
            created_date,
            modified_date,
            suggestion_content,
            suggestion_status,
            position_id,
            member_key
        )
        VALUES (
            UNHEX(REPLACE(UUID(), '-', '')),  -- id
            NOW(),  -- created_date
            NOW(),  -- modified_date
            CONCAT('샘플 내용 ', i),  -- suggestion_content
            'COMPLETED',  -- suggestion_status
            (SELECT id FROM position ORDER BY RAND() LIMIT 1),  -- 랜덤 position_id
            (SELECT member_key FROM member ORDER BY RAND() LIMIT 1)  -- 랜덤 member_key
        );

        SET i = i + 1;
    END WHILE;
END$$

DELIMITER ;

-- 프로시저 호출
CALL loopInsert();

PK, FK, Not null, Unique 값들만 넣어줬는데도 복잡하긴 하다.

 

생성한 데이터 확인하기

SELECT COUNT(*) AS total_rows
FROM suggestion;

저작자표시 (새창열림)

'Backend&DB' 카테고리의 다른 글

API 응답 속도 개선하기 (2) - 데이터베이스 인덱싱(indexing), explain  (2) 2024.11.27
API 응답 속도 개선하기 (1) - Paging과 Fetch Join, JPA N + 1 문제  (3) 2024.11.13
'Backend&DB' 카테고리의 다른 글
  • API 응답 속도 개선하기 (2) - 데이터베이스 인덱싱(indexing), explain
  • API 응답 속도 개선하기 (1) - Paging과 Fetch Join, JPA N + 1 문제
gyujh
gyujh
개발 공부 블로그
  • gyujh
    규
    gyujh
  • 전체
    오늘
    어제
    • 분류 전체보기 (86)
      • Backend&DB (3)
      • CS (5)
        • 컴퓨터구조 (1)
        • 소프트웨어공학 (4)
      • JavaScript (2)
      • Git (2)
      • 알고리즘 (73)
        • 개념 (3)
        • 백준 (70)
      • Projects (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정답
    스택
    답안
    시간초과
    BOJ
    풀이
    숏코딩
    딕셔너리
    정렬
    문자열
    프로그래머스
    너비우선탐색
    algorithm
    재귀
    답
    구현
    알고리즘
    백준
    에러
    런타임
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
gyujh
[SQL] 연관 관계가 있는 더미 데이터 생성하기
상단으로

티스토리툴바