MySQL Query Data Fake

Một số lệnh insert dữ liệu fake để test.

Ví dụ để tạo ra 1.000.000 – 10.000.000 dòng dữ liệu cho bảng sau với name và description có định dạng nội dung là: “Title test”, “Content test” + số thứ tự dữ liệu sinh ra.

Lưu ý:

  • Thời gian tạo dữ liệu đơn giản này diễn ra khá nhanh và chấp nhận được cho quá trình test.
  • Dung lượng bảng fake với 10.000.000 dòng dữ liệu định dạng nội dung như trên rơi vào khoảng 600-700MB.

Sử dụng CONCAT + UNION

Câu lệnh sử dụng cấu trúc SELECT kết hợp với subquery tạo ra bảng dữ liệu tạm từ 1->100.000. Trong đó các subquery sẽ tạo ra các số từ 0->9, sau đó sẽ tạo ra các số từ 0-99999. Cuối cùng CONCAT sẽ nối chuỗi “Title test” và “Content test” với các số tương ứng và thực hiện INSERT INTO để thêm dữ liệu fake vào bảng.

Lưu ý: mỗi subquery sẽ tương ứng với 1 số 0 trong tổng số dữ liệu cần fake. Ví dụ sau fake 100.000 dữ liệu ứng với 5 số 0 sẽ có 5 subquery. Tương ứng để fake 1.000.000 dữ liệu chỉ cần thêm 1 subquery.

INSERT INTO task_request_type_items (name, description)
SELECT CONCAT('Title test', t.n), CONCAT('Content test ', t.n)
FROM (
  SELECT @row := @row + 1 AS n
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t1,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t2,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t3,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t4,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t5,
  (SELECT @row:=0) t6
) t;

 

Ví dụ để thêm 10.000.000 triệu dòng dữ liệu như trên câu query sẽ như sau. Thời gian thực thi test trên MySQL PHP Admin là khoảng 45 giây.

INSERT INTO task_request_type_items (name, description)
SELECT CONCAT('Title test', t.n), CONCAT('Content test ', t.n)
FROM (
  SELECT @row := @row + 1 AS n
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t1,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t2,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t3,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t4,
  (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t5,
    (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t6,
    (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) t7,
  (SELECT @row:=0) t8
) t;