2011-04-23 63 views
0

嘿傢伙,我在另一個問題中發佈了這個問題,但我沒有得到有用的迴應。部分原因是我不認爲我正確地解釋了自己。所以即將去嘗試一次。mysql大查詢問題

我一直在編程一個後端服務器在VB.NET和它一直使用MySQL數據庫來存儲信息。直到兩天前,我一直使用虛擬主機的mysql服務器來做到這一點。

我不介意續訂我的網絡主機,所以我把所有的東西都搬到了家庭服務器上,以繼續處理我的程序。我已經安裝了MySQL 5.5(這是一個較新的版本,然後是我以前的網絡主機上的版本),除了目前爲止的一件事外,一切都運行良好。

這個程序第一次啓動時會發送一個關於一百萬張大表插入的查詢。該查詢看起來像「INSERT into blah VALUES(1,1,1,1,1); INSERT into ....」等等。這用於我的網絡主機(我有我的服務器程序運行在我的家庭服務器機器上,它通過網絡發送到網絡主機的MySQL的大約5-10分鐘左右)。

現在做本地一切我希望這會更快,但它並不重要,我只是需要它的工作。所以當我發送這個查詢時,它只會鎖定一分鐘左右,然後返回一個超時。當我檢查數據庫中的表時,每次我嘗試這個時,它已經加載了1000個項目。

現在我假設這是一些設置問題,但是我已經玩過我的「my.ini」,看看它是否會有所幫助,它沒有。我曾嘗試切換到一些預包裝的my-huge或my-innodb等,這些都沒有幫助。我會假設如果有什麼需要花費更長的時間或更長的時間,不僅僅是在1000次插入之後立即超時。

而只是使用一些背景信息的服務器計算機IM有一個四核酷睿i7,8GB的內存,並在它的1TB高清運行Windows 7

任何幫助將是巨大的謝謝你。

+0

爲什麼不生成csv文件並使用加載數據infile - 對innodb表一百萬行需要大約40秒才能加載。 – 2011-04-23 17:37:48

+0

插入百萬條記錄?什麼...即使某種「控制」記錄填充查找表等這樣的第一次.. – DRapp 2011-04-23 19:26:22

回答

2

可能您的查詢太大,您可以通過max_allowed_packet選項調整MySQL行爲。 您還可以通過將幾個插入查詢合併爲一個來保存一些字節,如下所示:INSERT INTO blah VALUES(1,1,1,1,1),VALUES(2,2,2,2,2),VALUES(3,3,3,3,3)。但是,如果這個大的組合查詢失敗,那麼插入的數據也會失敗。 但在我看來,這並不是最明智的做法。如果您的應用程序應該在開始時導入巨大的SQL轉儲,那麼可以使用像這樣的mysql -uroot -ppassword db_name < dump.sql這樣的mysql可執行文件,就完成了。這可能是完成這項任務的最有效方法。

+0

現在這個查詢工作在我的webhosts mysql,所以你認爲我應該能夠匹配,改變最大允許數據包選項? – tye 2011-04-23 17:20:10

+0

dunno,只需閱讀鏈接上的文檔 - 如果你有大量數據發送mysql(通常是一些blob),那麼你應該增加這個選項。 – 2011-04-23 17:23:53

+0

小修正:他可能想'插入到blah值(1,1,1,1,1),(2,2,2,2,2),(3,3,3,3,3)' – TehShrike 2011-04-23 17:26:49