簡體   English   中英

如何使用php在不給mysql服務器加負載的情況下運行多個sql查詢?

[英]How to run multiple sql queries using php without giving load on mysql server?

我有一個腳本,可以讀取包含產品列表的Excel工作表。 這些幾乎是10000個產品。 該腳本讀取這些產品並將其與mysql數據庫中的產品進行比較,並檢查

  • 如果該產品不可用,則添加它(因此我已將其插入查詢)

  • 如果該產品已經可用,則進行UPDATE IT(因此我已對其進行更新查詢)

現在的問題是,它在mysql服務器上創建了非常重的負載,並顯示一條消息“ mysql服務器已消失..”。

我想知道是否有一種更好的方法來執行此excel工作表而不在mysql服務器上加載?

我不確定是否是這種情況,但是從您的帖子來看,我認為情況可能是每次檢查都會初始化與MySQL服務器的新連接。 如果確實如此,則可以在執行此檢查之前僅連接一次,然后運行所有將來通過該連接進行的查詢。

一個不錯的優化選擇是,在MySQL中引入索引,這將大大加快產品搜索的速度,為那些在php搜索功能中引用最多的產品表列引入索引。

緊接着,您可以將MySQL緩沖區的大小增加到256 MB以上,以便緩存大多數結果,並使用InnoDB,因此您不必每次執行檢查以及輸入函數時都鎖定整個表。

我不確定為什么PHP會加入其中。 Excel可以直接連接到MySql數據庫,您應該能夠執行WHERE NOT IN查詢以添加項目和使用excel VBA更改的ons的UPDATE語句。

http://helpdeskgeek.com/office-tips/excel-to-mysql/

好,這是個好主意

在每次檢查之后(無論是否存在查詢)都不會運行查詢,只要您到達末尾,然后添加到您的sql中,然后最終執行它即可。

$query = ""; //creat a query container
if($present) {
    $query .= "UPDATE ....;"; //Remember the delimeter ";" symbol
} else {
    $query .= "INSERT ....;";
}
//Now, finally run it
$result = mysql_query($query);

現在,您在最后一部分進行查詢。


更新:另一種方法

使用查詢來處理它。

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

參考

您可以嘗試將代碼壓縮一些(盡管您可能已經這樣做了),但是如果您認為它可以減少很多,請發布它,我們可以看看。

您知道的緩存數據已經存在,因此,如果產品變量沒有定期更改,則可能不需要經常檢查它們。 您可以緩存數據以便以后快速檢索/更改(請參閱Memcached,還有其他緩存替代方法可用)。 您最終可能會大大減少您的工作量。

你有沒有分開你的MySQL服務器? 嘗試在其他子系統上運行產品檢查,然后將數據庫合並到主要,每小時或每天或其他任何時間。

暫無
暫無

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

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