2011-12-18 46 views
2

我有以下結構的「項目」表方式: 項目 ID 名 等MySQL中,最好要插入1000行

用戶可以把從這個項目表中的項目進入他們的庫存。我將它存儲在庫存表中,如下所示:

inventory 
    id 
    item_id 
    user_id 

可以將1000行插入庫存表中嗎?插入1000行的最佳方式是什麼?

+0

插入1000條記錄不應該是任何DBMS值問題的鹽的問題,但不能只是將'collection(id)'添加到用戶的'inventory'而不是添加每個項目? – 2011-12-18 18:45:02

+0

歡迎來到堆棧溢出。我編輯了你的問題,使其更具可讀性。不要忘記在您鍵入的文本框下方使用預覽面板! – 2011-12-18 18:45:54

+0

@Lieven,收藏品中的物品可能會在用戶接受後改變。因此,這取決於您是希望用戶的項目集保留它們所用的集合,還是隨着集合更改而自動更新。 – 2011-12-18 19:03:11

回答

1

可以插入1000行。您應該這樣做,作爲transaction,以便在提交時立即更新索引。

您也可以構造一個INSERT語句來一次插入許多行。 (請參閱INSERT的語法。)但是,我想知道爲1000行做這件事是多麼可取。

最有效的將可能是使用LOAD DATA INFILELOAD XML

1

當它進入1000年,我通常使用寫入到一個管道分隔的CSV文件,並使用LOAD DATA INFILE它在快速吸。通過寫入磁盤,如果您使用的語言對字符串大小有限制,則可避免溢出字符串緩衝區的問題。 LOAD DATA INFILE針對批量上傳進行了優化。

我已經做到了這一點,高達10億行(在一個便宜的$ 400 4GB的3歲32位Ubuntu盒),所以一千是不是一個問題。

補充說明:如果你不關心id分配,你只想要一個新的唯一ID爲插入的每個記錄,你可以考慮在表上id建立AUTO_INCREMENT讓Mysql的分配ID爲你。

+0

我想可以把數十億行放到一張表中。但是MySQL在這種情況下會有什麼樣的讀/寫性能呢?但是,我想,這裏超出了範圍。 – 2011-12-18 18:54:42

+0

@SergeiTulentsev fwiw,花了我2​​0分鐘來加載1bln,但是當你用完所有的內存時你必須正確地配置Mysql - ref:http://www.cplusplus.com/forum/lounge/44688/ - 你基本上受到限制通過記憶和索引。 – kfmfe04 2011-12-18 18:59:06

2

MySQL可以在無需任何調整的情況下在單個表中處理數百萬條記錄。幾乎沒有什麼調整,它可以處理數億(我做到了)。所以我不會爲此擔心。

要提高插入性能,您應該使用批量插入。

insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_2); 

存儲記錄到文件中,並使用load data infile得到更好的結果(最好在我的情況),但它需要更多的努力。

0

這種類型還取決於你有多少用戶,如果你有1,000,000用戶每隔幾分鐘就做一次1,000個插入,那麼服務器將很難跟上。從MySQL的角度來看,它肯定能夠處理那麼多的數據。