gpt4 book ai didi

php - 这段代码的性能很糟糕

转载 作者:行者123 更新时间:2023-11-29 14:03:45 26 4
gpt4 key购买 nike

我正在使用 codeigniter 和 mysql,我正在尝试从 mssql 服务器获取一些数据并更新到我的系统。它非常慢。如果我做错了什么,请告诉我..

class systemupdate extends MY_Controller{

function systemupdate() {
return parent::MY_Controller();
}

function index(){
$message = '';
$message = "CRON Information::COMMON INVENTORY SYSTEM: QUANTITY UPDATE FOR TRADE WH STARTED.";
log_message('info', $message);
$this->load->model("cis/sapinventorymodel");
$objMainResult = $this->sapinventorymodel->FetchDetailsByUnit(420);
$mainResult = json_decode($objMainResult);
if((isset($mainResult)) && ($mainResult->results > 0))
{
$this->load->model("cron/systemupdatemodel");
foreach($mainResult->rows as $main)
{
$arrQuantity = '';
$arrQuantity = $this->systemupdatemodel->FetchTradeWhQuantity($main->number);
if((isset($arrQuantity)) && (count($arrQuantity) > 0))
{
if((isset($arrQuantity[0]->quantity)) && ($arrQuantity[0]->quantity != NULL)){
$objMainResult = $this->sapinventorymodel->SaveTradeWhQuantity($main->a_umber, $main->a_plant,
$main->a_unit,$arrQuantity[0]->quantity);
}
}
}
}
$message = "CRON Information::COMMON INVENTORY SYSTEM: QUANTITY UPDATE FOR TRADE WH FINSIHED.";
log_message('info', $message);
}
}

这是模型

class systemupdatemodel extends MY_Model {

function systemupdatemodel() {
parent::__construct();
$CI->sapData = $this->load->database("sapinventory", TRUE);
$this->sapData = &$CI->sapData;
}

function FetchTradeWhQuantity($p_intNumber){

$query = $this->sapData->query("SELECT quantity FROM master1 WHERE NUMBER = '$p_intNumber'");
if(($query->num_rows() > 0) && ($query->num_rows() == 1)){
return $query->result();
}else
{
$query1 = $this->sapData->query("SELECT quantity FROM master2 WHERE EANNUMBER = '$p_intNumber'");
if(($query1->num_rows() > 0) && ($query1->num_rows() == 1)){
return $query1->result();
}
}
}
}

记录总数为 7857 条,即循环次数的两倍。 sapinventory 是一个 mssql 服务器。

最佳答案

FetchTradeWhQuantitySaveTradeWhQuantity 在这种情况下会执行大量运行。这意味着(可能)每行至少有 3 个 mysql 查询。如果您考虑通过 1 或 2 个大型查询来运行此操作,您的性能将会非常明显地提高。

现在这可能是一件容易做的事情,也可能是一件很难做的事情。

例如;

function FetchTradeWhQuantity($p_intNumber){ ... }

可能是

function FetchTradeWhQuantity($p_intNumber) {

$query = $this->sapData->query("

SELECT quantity
FROM master 1
WHERE NUMBER = '{$p_intNumber}'
UNION
SELECT quantity
FROM master2
WHERE EANNUMBER = '{$p_intNumber}'

");

if ($query->num_rows() == 1)
return $query->result();

}

但是您能做的最好事情是仅通过 2-3 个查询来完成所有这些操作。获取所有数据,使用其 ID 并运行 UPDATEINSERT INTO ... ON DUPLICATE KEY UPDATE。然后服务器只需要连接到 mysql 数据库几次,而不必为每一小行与 php 玩弹球游戏。

关于php - 这段代码的性能很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14683166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com