728x90

1. 테이블 생성

먼저 생성할 데이터를 저장할 테이블을 생성합니다.

-- 대상 테이블 생성
CREATE TABLE IF NOT EXISTS performance_test (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age TINYINT UNSIGNED,
    city VARCHAR(50),
    salary INT UNSIGNED,
    created_at DATETIME
);

2. 순차 번호 테이블 생성.

MariaDB에는 기본적으로 숫자 시퀀스를 생성하는 내장 기능이 없기 때문에, 순차 번호(1~1000만) 테이블을 만들어 사용할 수 있습니다. 다음 스크립트를 사용하여 연속된 숫자를 포함한 테이블을 만듭니다.

 

-- 순차 번호(1~1000만) 테이블 생성 
CREATE TABLE IF NOT EXISTS seq_1000K AS 
WITH base as (
	SELECT 0 UNION ALL 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
)
SELECT 	@row := @row + 1 AS number 
FROM 	base t1, 
		base t2,
		base t3,
		base t4,
		base t5,
		base t6,
		base t7,
		(SELECT @row := 0) t99
;

3. 대량 데이터 삽입 반복

한번 실행할 때마다 1000만 행씩 삽입합니다. 더 많은 데이터를 추가하려면 위의 INSERT INTO SELECT 구문을 여러 번 실행합니다.

-- 할번 실행할 때마다 1000만 행 삽입
INSERT INTO performance_test (name, age, city, salary, created_at)
SELECT 
    CONCAT('user_', number + 10000) AS name,                 -- 유일한 이름 생성
    FLOOR(RAND() * 100) AS age,                              -- 0~99 사이의 랜덤 나이
    ELT(FLOOR(RAND() * 5) + 1, 'Seoul', 'New York', 'Paris', 'Tokyo', 'Berlin') AS city,  -- 임의의 도시
    FLOOR(RAND() * 150000) + 30000 AS salary,                -- 30,000 ~ 180,000 사이의 랜덤 급여
    NOW() - INTERVAL FLOOR(RAND() * 3650) DAY AS created_at  -- 과거 10년 안의 임의 날짜
FROM  seq_1000K
;
-- 데이터의 개수 확인
SELECT COUNT(*) FROM performance_test;

 

(source : chatgpt generation)

728x90

'Data Science > DB+SQL' 카테고리의 다른 글

[DBMS] 컬럼 기반(Column-oriented) vs. 로우 기반 (Row-oriented)  (0) 2024.09.26
[OLAP] Open Source OLAP DBMS  (0) 2024.09.25
[DuckDB] DuckDB Installation  (0) 2024.09.24
[DuckDB] what is DuckDB  (0) 2024.09.24
[DBMS] Isolation Level  (0) 2024.09.21
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
반응형