티스토리 뷰

-- 임의의 나라 입력
INSERT INTO country (country_name, country_code)
VALUES
('대한민국', 'KR'),
('미국',     'US'),
('일본',     'JP'),
('중국',     'CN'),
('독일',     'DE');

-- shop 40개 생성 e.g.판교 N호, 광화문 N호...
-- customer 5명 생성


-- 임의 이름 브랜드 삽입
INSERT INTO brand (brand_name)
VALUES ('SAMSUNG'),
       ('APPLE'),
       ('LG'),
       ('HP'),
       ('CANON');


-- 임시 테이블을 이용해서 500건 생성
INSERT INTO goods (brand_id, goods_name)
SELECT 
    FLOOR(1 + (RAND() * 5)) AS brand_id,        -- 1~5 랜덤 브랜드
    CONCAT('상품', FLOOR(1 + (RAND() * 80))) AS goods_name  -- 상품1~상품80 랜덤 이름
FROM (
    SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
    UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
) t1
CROSS JOIN (
    SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
    UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
) t2
CROSS JOIN (
    SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) t3
LIMIT 500;

 

더미 데이터 5개 생성

 

이렇게 더미 데이터를 여러개 생성해보았는데, 성능에 문제가 있으려면 ㅠㅠ

더 많은 데이터가 있어야할거 같네요 구문을 수정해야겠습니다

 

 

goods -> 100,500개

customer -> 50,050명

purchase_goods -> 100,500건 

 

 

 

  • 테이블: goods 10만, customer 5만, purchase_goods 3천만 목표
  • 문제: 대량 삽입과 조회 성공
-- 주문내역에서 3-4개를 구매한 상품 이름과 구매한 고객 이름을 출력한다.

SELECT 
    c.customer_name,
    g.goods_name,
    pg.quantity
FROM purchase_goods pg
JOIN customer c ON pg.customer_id = c.customer_id
JOIN goods g ON pg.goods_id = g.goods_id
WHERE pg.quantity BETWEEN 3 AND 4;

-- 0.13sec 소요​

 

-- 고객별 집계 같이 추가 작업

SELECT c.customer_name, GROUP_CONCAT(g.goods_name) AS goods_list
FROM purchase_goods pg
JOIN customer c ON pg.customer_id = c.customer_id
JOIN goods g ON pg.goods_id = g.goods_id
WHERE pg.quantity BETWEEN 3 AND 4
GROUP BY c.customer_name;

-- 0.15sec 소요
-- GROUP_CONCAT 때문에 시간이 더 걸릴 수 있음!