[英]Comparing large MySQL data sets with PHP
我有大約110萬個唯一ID,我需要確定在我的應用程序數據庫中沒有對應記錄的ID。 一組ID也來自數據庫,但不是同一組。 我正在使用PHP和MySQL,並且有足夠的內存-PHP在具有15GB RAM的服務器上運行,而MySQL在其具有7.5GB RAM的服務器上運行。
通常,我只需要在一個查詢中加載所有ID,然后將它們與SELECT查詢的IN子句一起使用就可以進行一次比較。
到目前為止,我的嘗試導致腳本花費了難以忍受的長時間,或者使CPU達到了100%。
加載如此大的數據集並進行比較的最佳方法是什么?
從第一個數據庫生成ID的轉儲到文件中,然后將其重新加載到第二個數據庫的臨時表中,並在該臨時表和第二個數據庫表之間進行聯接以標識那些沒有匹配的記錄。 生成該列表后,可以刪除臨時表。
這樣,您就不會嘗試在PHP本身中處理大量數據,因此您不會遇到任何內存問題。
假設由於它們不在同一台數據庫服務器上而不能加入這些表,並且服務器可以處理這些表,我將用一個數據庫中的所有ID填充一個數組,然后遍歷另一個數據庫中的ID並使用in_array查看數組中是否存在每個。
順便說一句-根據這個 ,可以使in_array更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.