日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 执行多个文件,PHP提高执行多个查询时读取一千行文件的性能

發布時間:2025/3/15 php 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 执行多个文件,PHP提高执行多个查询时读取一千行文件的性能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我試圖建立一個腳本,我需要讀取txt文件并使用文件上的行執行某個過程。例如,我需要檢查ID是否存在,如果信息已更新(如果有),則更新當前表(如果不存在),則在另一個臨時表上插入一個新行,稍后手動檢查。PHP提高執行多個查詢時讀取一千行文件的性能

這些文件可能包含超過20,30000行。

當我剛剛讀取文件并從行中打印一些dummie內容時,需要40-50ms。但是,當我需要連接到數據庫來執行所有這些驗證時,由于超時而在停止之前停止。

這是我在做什么至今:

$handle = fopen($path, "r") or die("Couldn't get handle");

if ($handle) {

while (!feof($handle)) {

$buffer = fgets($handle, 4096);

$segment = explode('|', $buffer);

if (strlen($segment[0]) > 6) {

$param = [':code' => intval($segment[0])];

$codeObj = Sql::exec("SELECT value FROM product WHERE code = :code", $param);

if (!$codeObj) {

$param = [

':code' => $segment[0],

':name' => $segment[1],

':value' => $segment[2],

];

Sql::exec("INSERT INTO product_tmp (code, name, value) VALUES (:code, :name, :value)", $param);

} else {

if ($codeObj->value !== $segment[2]) {

$param = [

':code' => $segment[0],

':value' => $segment[2],

];

Sql::exec("UPDATE product SET value = :value WHERE code = :code", $param);

}

}

}

}

fclose($handle);

}

這是我的SQL類與PDO連接并執行查詢:

public static function exec($sql, $param = null) {

try {

$conn = new PDO('mysql:charset=utf8mb4;host= '....'); // I've just deleted the information to connect to the database (password, user, etc.)

$q = $conn->prepare($sql);

if (isset($param)) {

foreach ($param as $key => $value) {

$$key = $value;

$q->bindParam($key, $$key);

}

}

$q->execute();

$response = $q->fetchAll();

if (count($response)) return $response;

return false;

} catch(PDOException $e) {

return 'ERROR: ' . $e->getMessage();

}

}

正如你所看到的,每個查詢我通過Sql::exec()來做,正在打開一個新的連接。我不知道這是否可能是此過程出現延遲的原因,因為當我沒有執行任何Sql查詢時,腳本在ms內運行。

或者其他部分的代碼可能會導致這個問題?

+0

例如,您是通過命令行還是通過HTTP和Apache在后臺運行它。似乎更適合后臺進程。 –

+0

當然,我不會連接到循環中的數據庫,你應該保存連接到一個類屬性或你有什么,并重新使用它。 –

+0

@ArtisticPhoenix這是通過cron作業在后臺運行。我的意思是,cronjob調用這個php文件來執行這個函數,但它也可以手動調用(如果需要的話 - 不常見),或者在這個測試階段,我仍然在構建腳本,然后我正在通過xhr request –

總結

以上是生活随笔為你收集整理的php 执行多个文件,PHP提高执行多个查询时读取一千行文件的性能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。