2

私はこのようなテーブルを持っています:

create table stream_last
(
        symbol_id       integer,
        high            decimal(8,2),
        low             decimal(8,2),
        last            decimal(8,2),
        volume          integer,
        last_updated    datetime,
        INDEX USING BTREE(symbol_id)
) ENGINE=MEMORY;

5 秒ごとに約 4,000 回の挿入を行う必要があります (ストリームを読み取り、symbol_id に集約する C プログラムによって吹き込まれます)。ただし、最初にデータを並べ替えて、symbol_id ASCENDING の順に挿入することはできます。これにより、この一括挿入が高速になりますか?

二次的な質問は、BTREE がインデックスに最適なオプションであるかどうかです。ドキュメントから、HASH を使用することもできましたが、どれが最適かわかりませんでした...

ドン

4

2 に答える 2

4

提案した最適化で大きな違いが得られるとは思わないでください。ただし、ここにリストされているアドバイス

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

あなたのニーズをよりよく理解するのに役立つかもしれません。

この引用には意味があるかもしれません

B ツリー インデックスを想定すると、テーブルのサイズによってインデックスの挿入がログ N だけ遅くなります。

次の方法を使用して、挿入を高速化できます。

同じクライアントから同時に多数の行を挿入する場合は、複数の VALUES リストを指定した INSERT ステートメントを使用して、一度に複数の行を挿入します。これは、個別の単一行の INSERT ステートメントを使用するよりもかなり高速です (場合によっては何倍も高速です)。空でないテーブルにデータを追加する場合は、bulk_insert_buffer_size 変数を調整して、データの挿入をさらに高速化できます。セクション5.1.3「サーバーシステム変数」を参照してください。

于 2012-04-19T00:28:02.263 に答える