1

MySQL データベース テーブルにランダムな値を 10 000 回入力する単純なプログラムを作成したいと考えています。InnoDB (標準の行指向エンジン) と InfiniDB (特定の列指向エンジン) の 2 つのエンジンを使用して、テーブルへの挿入と読み取りの速度をテストしたいと考えています。これを行う方法はありますか?これは、私のデータベース内のテーブルの 1 つの例です。

CREATE  TABLE IF NOT EXISTS `mydb`.`tblVariable` (
  `idtblVariable` INT NOT NULL ,
   `name` VARCHAR(20) NULL ,
   `station_id` INT NULL ,  
   `description` VARCHAR(100) NULL ,
   `id_history` INT NOT NULL DEFAULT 0 ,
   `type` ENUM('Analog','Digital') NOT NULL
)

説明すると.. idtblVariable は 1 から 10 000 までの数字になります ランダムな名前は次のようになります: PT1,..., PT10000 たとえば、説明は次のようになります: a,a,a,a, 10 000 回など. クライアント側はプログラムであり、挿入と読み取りは C# で行われ、フォーム、クラシック アプリケーションです。これはバッチプログラムで実行できますか???

4

2 に答える 2

3

1 から 10000 までの数値を入力するためのもう 1 つのトリックを次に示します。一時テーブルまたはテーブル変数を作成し、0 から 9 までの数値を入力すると、次のようになります。

CREATE TABLE TEMP 
(Digit int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

次に、次のように 1 から 10000 までの数値を生成できます。

INSERT INTO tblVariable (idtblVariable) 
SELECT id
FROM
(
SELECT t4.digit * 1000 + t3.digit * 100 + t2.digit * 10 + t1.digit + 1 AS id
FROM         TEMP AS t1
  CROSS JOIN TEMP AS t2
  CROSS JOIN TEMP AS t3
  CROSS JOIN TEMP AS t4
) t

SQL フィドルのデモ

于 2012-09-27T11:19:40.647 に答える
1

これは、ストアド プロシージャを介して行うことができます。たとえば、次のようになります。

CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`()
BEGIN
 #Routine body goes here...
DECLARE counter INT;
DECLARE i INT;

SET i = 0;
SET counter = 10000;

WHILE i < counter DO
    INSERT INTO tblVariable (idtblVariable, name, /*Other fields*/) 
    VALUES (i, CONCAT('PT',i), /*Other values*/);
    SET i = i + 1;
END WHILE;

END;

MySQL パーミッションで問題が発生した場合 は、パートDEFINER =ルートlocalhostを削除または更新できます。UPDATE : 次に、ストアド プロシージャの作成後、次のようにプロシージャを呼び出すことができます。@

CALL NewProc;
于 2012-09-27T11:09:55.997 に答える