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;
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 |
최근댓글