簡體   English   中英

如何使用php向MySQL中插入/更新大量數據

[英]How to insert/update a large amount of data into mysql using php

我有一個Excel工作表,其中包含大量數據。 我正在使用php將數據插入mysql服務器。

我有兩個問題

1)如果ID已經存在,我必須更新一行,否則插入數據。

2)大問題:我有超過40,000行,並且由admin設置的sql服務器上的超時為60秒。 當我運行更新/插入查詢時,將花費超過60秒鍾的時間,因此會發生超時。 因此,整個過程將失敗。

有辦法嗎?

目前,我正在檢查學生證是否存在,然后更新否則插入。 我覺得這花了很多時間,導致服務器超時。

我在mysql中也有此字段,說明上次數據更新時間(last_update)。 我當時正在考慮使用該日期,如果該日期已過特定日期(即我上次運行程序的日期),則僅應更新這些行。

無論如何會有所幫助嗎?

我可以運行什么查詢來檢查mysql數據庫中的該日期,即如果該日期已過特定日期,則僅需要更新那些行,而無需更新其他所有內容。 (請為我提供上述示例查詢的幫助!!!!!!!!!!)

假設您使用的是InnoDB引擎(在最新的MySQL版本中是默認值),則應僅使用事務:將插入循環包裝到BEGIN中; ...提交; 塊。

默認情況下,每個語句都作為事務運行,並且服務器必須確保數據安全地將其保存到磁盤,然后再繼續執行下一條語句。 如果啟動事務,然后執行許多插入操作,然后再提交事務,則服務器必須將所有數據刷新到磁盤上。 在現代硬件上,這僅相當於很少的磁盤操作,而不是500k。 另一個考慮因素是使用准備好的語句 服務器必須在執行之前解析每個SQL語句。 這種解析不是免費的,而且解析時間可能比實際查詢執行時間更昂貴,這並不罕見。 通常,此解析是每一次完成的,對於您而言,它是500k次。 如果使用准備好的語句,則解析/准備僅執行一次,並且執行語句的成本僅是磁盤寫入(如果您處於活動事務中,則會進一步提高成本,因為服務器可以通過延遲寫入直到事務提交來批量寫入)。

使用這些方法可以帶來巨大的改善-我已經看到使用事務將總運行時間從30分鍾減少到20秒的情況。

http://php.net/manual/en/pdo.prepared-statements.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM