2012-04-19 9 views
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; 

私は約4,000インサート(Cプログラムストリームを読み取り、symbol_idに集約することで、内ブラスト)5秒ごとに行う必要があります。しかし、私はデータを最初にソートして、symbol_id ASCENDINGで順番に挿入することができました。この一括挿入を高速化するでしょうか?

二次的な質問は、インデックスのための最良のオプションBTREEでしょうか?ドキュメントから、私はHASHを使用しますが最善だろうかわからなかったことができた...

ドン

答えて

3

はあなたが提案してきた最適化と任意の有意な差を得てもよいと思いますが、アドバイスしないでください。ここに記載されている

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

は確かにあなたがより良いあなたのニーズを理解するのに役立つことがあります。

この引用は、センス

テーブルのサイズは、ログN、 仮定Bツリー索引によって索引の挿入を遅くを有していてもよいです。

あなたが挿入をスピードアップするために、以下の方法を使用することができます

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

+1

wow no kidding。情報のためのthx。私はこれを知らなかった:INSERT INTO tbl_name(a、b、c)VALUES(1,2,3)、(4,5,6)、(7,8,9); –

関連する問題