1

投稿を読みました: How number of columns impact performance ? . 列の数によって挿入速度が劇的に遅くなるようです。そこで、2 つのテーブルを作成しました。最初のテーブルには 100 の tinyint 列と 100 の smallint 列があり、2 番目のテーブルには 1 つのバイナリ (100) 列と 1 つのバイナリ (200) 列があります。したがって、これら 2 つのテーブルの行の長さは同じです。

より具体的に:

CREATE TABLE 'users'(

   'c0' tinyint(4) not null default '0',

   'd0' smallint(6) not null default '0',

   .....

   'c99' tinyint(4) not null default '0',

   'd99' smallint(6) not null default '0'

) ENGINE = InnoDB default CHARSET = utf8

CREATE TABLE 'users2'(

   'c0' binary(100) not null default '\0 *100',

   'd0' binary(200) not null default '\0 * 200'

) ENGINE = InnoDB default CHARSET = utf8

次に、mysql ワークベンチから次の 2 つの手順を実行しました。

create procedure insert1()

begin

    declare v_max int default 1000;
    declare v_counter int default 0;
    while v_counter < v_max do
         insert into user (c0, d0, c1, d1....c99, d99) values (0,0,0.....0);
         set v_counter = v_counter + 1;
    end while;
end

create procedure insert2()

begin

    declare v_max int default 1000;
    declare v_counter int default 0;
    while v_counter < v_max do
         insert into users2 (c0, d0) values (0x0000...00, 0x000....00);
         set v_counter = v_counter + 1;
    end while;
end

結果は次のとおりです。

insert1() の呼び出し: 0.999 秒

insert2() の呼び出し: 3.479 秒

これら 2 つのテーブルの行の長さは同じで、最初のテーブルにはより多くの列 (200 列) があるため、最初のテーブルの挿入速度は 2 番目のテーブルより遅くなるはずです。誰かがなぜこれが起こるのか説明できますか? 前もって感謝します!

4

1 に答える 1

0

binary(100) を binary(4) に、binary(200) を binary(6) に変更する必要があります。binary(n) は 2 進数ではなく、n = 1 バイト用であると聞いたことがあります。

于 2014-10-03T14:06:13.097 に答える