• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何使用Sql生成測試數據

    發表于:2009-04-16來源:作者:點擊數: 標簽:sqlSQLSql數據
    無論您是在用原型證明某一概念,還是 開發 一個全新的應用程序,或者只是學習 SQL ,您都需要在您的應用程序上運行 測試 數據。本文討論了如何生成足夠的、對測試有用的、具有期望的值分布和列間相關性的測試數據。 使用 SQL 生成大量測試數據 無論您是在用原
    無論您是在用原型證明某一概念,還是開發一個全新的應用程序,或者只是學習 SQL,您都需要在您的應用程序上運行測試數據。本文討論了如何生成足夠的、對測試有用的、具有期望的值分布和列間相關性的測試數據。 使用 SQL 生成大量測試數據

    無論您是在用原型證明某一概念,還是開發一個全新的應用程序,或者只是學習 SQL,您都需要在您的應用程序上運行測試數據。為了有效地測試應用程序的性能,您必須擁有足夠的測試數據,以便暴露潛在的性能問題。只要可以得到,用實際數據來進行測試總是更可取一些。如果沒有可用的實際數據,那么在許多情況下,也可以生成足夠的假想數據。一般來說,從頭開始構造大量數據是件很容易的工作,您自己就可以快速地獨立完成。

    本文提供了一些如何利用 SQL 腳本來生成測試數據的示例,而這些腳本本身就是較好的 SQL 實踐。并且還討論了一些為了生成盡可能真實的數據而應該注意的問題。

    生成大量記錄 即使數據庫是新創建且仍然為空的,也總是會帶有系統表和視圖,因此,您可以按以下方法使用它們: CREATE TABLE DB2ADMIN.SALES
    (CUSTOMER_ID INT NOT NULL, ITEM_ID INT NOT NULL,
    SALE_QUANTITY SMALLINT NOT NULL, SALE_DATE DATE NOT NULL);
    INSERT INTO SALES
    SELECT
    SYSFUN.RAND()*500 + 1 AS CUSTOMER_ID,
    SYSFUN.RAND()*100 + 1 AS ITEM_ID,
    1 + SYSFUN.RAND()*10 AS SALE_QUANTITY,
    DATE('01/01/2003') + (SYSFUN.RAND()*200) DAYS AS SALE_DATE
    FROM SYSCAT.COLUMNS;

    SALES 表中的記錄數就與 SYSCAT.COLUMNS 中的完全一樣了。請注意,多個列都是用隨機值來填充的。例如,SALE_QUANTITY 列中的所有值都是處于 1 到 10 之間,約 10% 的記錄具有各不相同的值。如果您需要更多記錄,就可以根據需要多次重復執行這條 INSERT 語句。您還可以像下面這樣使用交叉連接(CROSS JOIN),以便每條語句獲得更多記錄:

    注意:本例中,表 T1 和 T2 的連接是不含任何條件的,因此,T1 中的每一行會匹配 T2 中的每一行。這種類型的連接稱作交叉連接。

    注意:這條 INSERT 語句所涉及的事務可能會相當大,以致于您的服務器無法加以處理。如果您遇到“log full”的情況(SQL0964C 數據庫的事務日志已滿),您可能需要增加日志空間,或者通過指定 T1 或 T2 或兩者中的 WHERE 子句來獲得一個較小的事務。

    您可以使用該方法來生成大量記錄,然而,該方法有點過分簡單了,因為所有的值都是均勻分布的,而且它們之間不存在相關性。

    填充子表 您的數據庫中很可能存在多對一的關系。下列示例展示了如何填充子表,以使每一條父記錄都具有隨機的多條子記錄。 CREATE TABLE DB2ADMIN.PARENT_TABLE(PARENT_ID INT NOT NULL, NUM_CHILDREN INT NOT NULL);
    INSERT INTO DB2ADMIN.PARENT_TABLE
    SELECT ROW_NUMBER() OVER(), SYSFUN.RAND()*5 + 1
    FROM SYSCAT.TABLES;
    ALTER TABLE DB2ADMIN.PARENT_TABLE ADD PRIMARY KEY(PARENT_ID);

    CREATE TABLE DB2ADMIN.CHILD_TABLE(PARENT_ID INT NOT NULL, CHILD_NUM INT NOT NULL);

    INSERT INTO DB2ADMIN.CHILD_TABLE
    SELECT PARENT_ID, SEQUENCE_TABLE.NUM
    FROM DB2ADMIN.PARENT_TABLE
    JOIN
    (SELECT ROW_NUMBER() OVER() AS NUM
    FROM SYSCAT.TABLES) AS SEQUENCE_TABLE
    ON AUXILIARY_TABLE.NUM<NUM_CHILDREN;

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>