🔥
Caster 開發日誌
  • Java
    • JVM Performance Tool
      • Java Debug Wire Protocol (JDWP) 的詳細介紹
      • JConsole 詳細介紹
    • Spring Boot
      • Spring Security
      • Spring Boot Admin
      • Spring Event
      • Spring AOP
      • Spring Boot JUnit 5
      • Apache Dubbo
    • Reflect 應用
    • ELK + F 建構
    • Socket.IO
    • OCR - 光學字元辨識
    • 讀取JAR resource文件
    • LocalTime & MySQL時間精度
    • Gradle multi module
    • MyBatis-Plus
    • Java Date operation
    • Java IP to Long
    • Apache Commons lang3 應用
      • Function 應用
    • Cloud Platform
      • Amazon S3
        • SDK V1
          • Bucket
        • SDK V2
          • Bucket
      • Google Cloud Platform
      • Azure Cloud
        • Storage
      • OVHcloud
        • Config
    • SSL/TLS工具
    • Util 工具
      • Jackson Json工具
      • Charles應用
      • JMeter – Performing Distributed Load Testing with Docker
    • Redis
      • Stream
      • Redisson 分布式鎖機制
      • Create Redis Cluster Using Docker
      • List Operations
    • Java 8
      • method & constructor Reference
      • CompletableFuture
      • FunctionInterface
      • Stream 應用
      • 繁簡轉換 - 簡易調整
    • MySQL
      • 建立測試用 流水號Table
      • SQL 效能調校 - Explain
      • SQL 效能調校 - Partition
      • 排程 - Event
    • Apache ShardingSphere
  • Kubernetes
    • 初入江湖(K8S)
    • 零中斷服務滾動更新
    • Kubernetes DNS
    • Ingress & Ingress Controller 教學
    • Ingress TLS Easy setup
  • 指令集
  • Telegram
  • SourceTree
    • 踩坑紀錄(ㄧ) - Git Flow
    • 踩坑紀錄(二) - 修改檔名
  • 專案統計
    • Robot
    • Recharge
  • GitHub
    • Actions
  • GitLab
    • 介紹 GitLab
    • 使用 Docker 自架 GitLab
    • 簡介 GitLab CI/CD
      • GitLab Runner 詳細介紹與設定方式
Powered by GitBook
On this page
  1. Java
  2. MySQL

建立測試用 流水號Table

這個存儲過程名為 createNumberTable,用於創建一個包含數字的記憶體表(sequence_number),以便生成假數據或進行測試。

以下是對這個存儲過程的註解和方法說明:

# Create a number table for generating fake or test data.
DROP PROCEDURE IF EXISTS createNumberTable;
DELIMITER //
CREATE PROCEDURE createNumberTable()
BEGIN
    DROP TABLE if exists local_test.sequence_number;
    CREATE TABLE local_test.sequence_number
    (
        id INT UNSIGNED NOT NULL PRIMARY KEY
    ) ENGINE = Memory;

# add id 0 ~ 100 row data
    INSERT INTO sequence_number(id)
    SELECT @num := @num + 1
    FROM information_schema.INNODB_BUFFER_PAGE a
       , (SELECT @num := 0) b
    LIMIT 100;

# add id 100 ~ 10000 row data
    INSERT INTO sequence_number(id)
    SELECT @num := @num + 1
    FROM sequence_number a
       , (SELECT id
          FROM sequence_number
          LIMIT 99) b
       , (SELECT @num := 100) c;

# check sequence_number data info
    SELECT COUNT(1)
         , MIN(id)
         , MAX(id)
    FROM sequence_number;
END //
DELIMITER ;

-- call procedure
CALL createNumberTable();

# According to the 'sequence_number' table, its maximum number of records is 10,000.
# So, if the limit is set to 10, the maximum number of inserted records is 100,000.
# If it's set to 20, the maximum number of inserted records is 200,000, and so forth(on).
INSERT INTO t_big_data_practise(name, content_m, content_t, create_date, type)
SELECT HEX(RAND() * 0xFFFFFFFF),
       concat(HEX(RAND() * 0xFFFFFFFF), HEX(RAND() * 0xFFFFFFFF)),
       HEX(RAND() * 0xFFFFFFFF),
       DATE_ADD('2023-01-01', INTERVAL RAND() * 364 DAY),
       LEFT(HEX(RAND() * 0xFFFFFFFF), 2)
FROM local_test.sequence_number a
         JOIN (SELECT id
               FROM local_test.sequence_number
               LIMIT 2000) b;

-- check result
SELECT FORMAT(COUNT(1), 0) AS cnt
     , MIN(create_date)
     , MAX(create_date)
FROM t_big_data_practise;

這個存儲過程的主要功能是創建 sequence_number表,並填充一系列數字值,包括從 0 到 100 和從 100 到 10,000 的數字。最後,它通過查詢返回了表中的總行數、最小值和最大值。這個表可以用於測試和生成數據,特別是在需要一個包含連續整數的表時。

而外補充 Postgres 寫法

目前還在熟悉寫法,很多地方還不是很完善,暫時先這樣吧....

DROP PROCEDURE IF EXISTS local_test.createNumberTable;
CREATE OR REPLACE PROCEDURE local_test.createNumberTable()
AS $$
BEGIN
    DROP TABLE IF EXISTS local_test.sequence_number;
    CREATE TABLE local_test.sequence_number
    (
        id integer NOT NULL PRIMARY KEY
    );

    INSERT INTO local_test.sequence_number(id)
    SELECT generate_series(1, 10000);

    RAISE NOTICE 'Number of rows: %', (SELECT COUNT(1) FROM local_test.sequence_number);
    RAISE NOTICE 'Minimum id: %', (SELECT MIN(id) FROM local_test.sequence_number);
    RAISE NOTICE 'Maximum id: %', (SELECT MAX(id) FROM local_test.sequence_number);
END;
$$ LANGUAGE plpgsql;

-- call procedure
call local_test.createNumberTable();
PreviousMySQLNextSQL 效能調校 - Explain

Last updated 1 year ago