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

我需要做的每5秒(由一個C程序讀取流,並且聚集在symbol_id炸出)約4000的插入件。不過,我可以先對數據進行排序,然後按照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

哇不開玩笑。 thx的信息。我不知道這一點:INSERT INTO tbl_name(a,b,c)VALUES(1,2,3),(4,5,6),(7,8,9); – 2012-04-19 00:42:09