我有以下結構的「項目」表方式: 項目 ID 名 等MySQL中,最好要插入1000行
用戶可以把從這個項目表中的項目進入他們的庫存。我將它存儲在庫存表中,如下所示:
inventory
id
item_id
user_id
可以將1000行插入庫存表中嗎?插入1000行的最佳方式是什麼?
我有以下結構的「項目」表方式: 項目 ID 名 等MySQL中,最好要插入1000行
用戶可以把從這個項目表中的項目進入他們的庫存。我將它存儲在庫存表中,如下所示:
inventory
id
item_id
user_id
可以將1000行插入庫存表中嗎?插入1000行的最佳方式是什麼?
可以插入1000行。您應該這樣做,作爲transaction,以便在提交時立即更新索引。
您也可以構造一個INSERT語句來一次插入許多行。 (請參閱INSERT的語法。)但是,我想知道爲1000行做這件事是多麼可取。
最有效的將可能是使用LOAD DATA INFILE或LOAD XML
當它進入1000年,我通常使用寫入到一個管道分隔的CSV文件,並使用LOAD DATA INFILE它在快速吸。通過寫入磁盤,如果您使用的語言對字符串大小有限制,則可避免溢出字符串緩衝區的問題。 LOAD DATA INFILE針對批量上傳進行了優化。
我已經做到了這一點,高達10億行(在一個便宜的$ 400 4GB的3歲32位Ubuntu盒),所以一千是不是一個問題。
補充說明:如果你不關心id
分配,你只想要一個新的唯一ID爲插入的每個記錄,你可以考慮在表上id
建立AUTO_INCREMENT讓Mysql的分配ID爲你。
我想可以把數十億行放到一張表中。但是MySQL在這種情況下會有什麼樣的讀/寫性能呢?但是,我想,這裏超出了範圍。 – 2011-12-18 18:54:42
@SergeiTulentsev fwiw,花了我20分鐘來加載1bln,但是當你用完所有的內存時你必須正確地配置Mysql - ref:http://www.cplusplus.com/forum/lounge/44688/ - 你基本上受到限制通過記憶和索引。 – kfmfe04 2011-12-18 18:59:06
MySQL可以在無需任何調整的情況下在單個表中處理數百萬條記錄。幾乎沒有什麼調整,它可以處理數億(我做到了)。所以我不會爲此擔心。
要提高插入性能,您應該使用批量插入。
insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_2);
存儲記錄到文件中,並使用load data infile
得到更好的結果(最好在我的情況),但它需要更多的努力。
這種類型還取決於你有多少用戶,如果你有1,000,000用戶每隔幾分鐘就做一次1,000個插入,那麼服務器將很難跟上。從MySQL的角度來看,它肯定能夠處理那麼多的數據。
插入1000條記錄不應該是任何DBMS值問題的鹽的問題,但不能只是將'collection(id)'添加到用戶的'inventory'而不是添加每個項目? – 2011-12-18 18:45:02
歡迎來到堆棧溢出。我編輯了你的問題,使其更具可讀性。不要忘記在您鍵入的文本框下方使用預覽面板! – 2011-12-18 18:45:54
@Lieven,收藏品中的物品可能會在用戶接受後改變。因此,這取決於您是希望用戶的項目集保留它們所用的集合,還是隨着集合更改而自動更新。 – 2011-12-18 19:03:11