我有一個PHP項目,我必須將超過10,000行插入到SQL表中。這些數據從表格中獲取,並檢查一些簡單的條件,並在每月月底插入第二個表格。如何向MSSQL插入超過10000行表
我該怎麼做。
我認爲需要更多的澄清。我目前使用小批量(250插入)傳輸使用PHP cronjob,它工作正常。但我需要這樣做是最合適的方法。
什麼是最合適的。
- 的cronjob用PHP,因爲我目前使用
- 導出到文件,批量導入方法
- 某種存儲過程的轉移直接
或任何其他。
我有一個PHP項目,我必須將超過10,000行插入到SQL表中。這些數據從表格中獲取,並檢查一些簡單的條件,並在每月月底插入第二個表格。如何向MSSQL插入超過10000行表
我該怎麼做。
我認爲需要更多的澄清。我目前使用小批量(250插入)傳輸使用PHP cronjob,它工作正常。但我需要這樣做是最合適的方法。
什麼是最合適的。
或任何其他。
由於數據量較大,請批處理500條記錄進行處理。
檢查這500個批次的條件,直到那個時候,準備好另一批500個插入第一批處理等。
這不會給你的sql服務器帶來負擔。
通過這種方式我每天處理40K記錄。
10000行幾乎不大*,並且不需要將其分解爲更小的事務。 –
使用BULK INSERT - 它是專爲正是你所要求和顯著增加插入的速度。另外,(如果你確實沒有索引),你也可以考慮添加一個索引 - 一些索引(大多數是主鍵上的索引)可以提高插入的性能。
你應該能夠插入記錄的實際速率取決於確切的數據,表結構以及SQL服務器本身的硬件/配置,所以我不能給你任何數字。
然後我必須將它們導出到文件。這不會花費資源(RAM和處理器)。 –
是的,它會使用大量的RAM和處理器 –
這很簡單,你可以使用多個while來做,因爲10000行不是大數據!
$query1 = mssql_query("select top 10000 * from tblSource");
while ($sourcerow = mssql_fetch_object($query1)){
mssql_query("insert into tblTarget (field1,field2,fieldn) values ($sourcerow->field1,$sourcerow->field2,$sourcerow->fieldn)");
}
這應該是工作細
SQL Server中的一個批次不插入超過1000條記錄。您必須創建單獨的批次才能插入。在這裏,我提出了一些可以幫助你的替代方案。
創建一個存儲過程。爲有效數據創建兩個臨時表,其他用於無效數據。逐個檢查所有規則和驗證,並基於該數據插入到這兩個表中。
如果數據有效,則插入到有效的臨時表中,否則插入到無效的臨時表中。
現在,接下來使用合併語句,您可以根據需要將所有數據插入源表中。
,所以我希望這將是罰款
你謝謝你能轉移的表之間的記錄N多。
沒有什麼特別的。根據需要插入每一行。在月末,運行一個存儲過程或程序來執行月末處理。 – wallyk
您可能希望使用'INSERT ... SELECT' http://msdn.microsoft.com/en-us/library/ms174335.aspx –
最後我使用了批處理方法,它工作正常。 –