2011-12-07 56 views
2

我有兩個sql文件:第一個創建數據庫,表和存儲過程。第二個用90000個條目填充創建的表。sql執行不正確

創建sql文件共創建1個數據庫,26個表和104個存儲過程。 填充sql文件添加90000個條目。

由於某種原因,當我執行創建文件時,它每次都能很好地工作。

當我執行填充文件時,它工作的一半。它佔據了一半的桌子,另一半將保持空着。我注意到,如果我在執行創建文件後大約2分鐘後等待,然後嘗試執行填充文件,那麼它完美工作。爲什麼這樣做?沒有辦法快速填充表格而無需等待?

我使用的是最新版本的mysql,我嘗試通過phpmyadming執行填充文件的內容,並且獲得了相同的結果。

+0

這聽起來好像有東西在你的表上的鎖。你在使用交易嗎?在插入文件中,檢查哪個表正在插入併發布用於創建該表的sql。 –

+0

@AshBurlaczenko我沒有使用任何交易。我通過簡單地插入數據來插入數據,這是一個較小插入的例子'INSERT INTO faults('id','faults_name')VALUES(1,'name');'問題是隻有table被我插入1000多個條目在沒有2分鐘冷卻的情況下無法工作,我嘗試將插入量減少到更小,並且它工作正常。表格本身也不是特別的,每個表格最多包含7列。 – Quillion

+0

你有錯誤信息嗎?是否配置了可以在後臺線程中設置的任何類型的鏡像? –

回答

1

我必須假設創建數據庫和表的文件也創建PRIMARY KEYSIndexes。你有沒有考慮過拆分文件成:

  1. 創建數據庫和表
  2. 加載數據
  3. 創建主鍵和索引
  4. 創建存儲過程。

由於還建議嘗試增加bulk_insert_buffer_size並從單一查詢更改你插入的方式張貼到:

INSERT INTO faults(id, fault_name) VALUES (...), (...) ... 
+1

+1,如果在批量插入之後要執行鍵和索引*,則OP可以從運行CHECK獲益。 http://dev.mysql.com/doc/refman/5.0/en/check-table.html – Matthew

+0

哦,哇,這真是令人驚歎!它工作完美。這個程序怎麼沒有引起任何問題?也非常感謝@MatthewPK CHECK技巧也非常方便!非常感謝你們,這是一個救生員。 – Quillion

+0

@Quillion當您插入時必須更新索引和主鍵(這也是一個索引)的事實可能會導致這種情況發生。看看[INSERT SPEED](http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html),它會提供更多細節。事實上,創建索引總是更有優勢,因爲它們佔用的存儲空間更少 – Karlson