나는 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 서버입니다.
개선 할 수있는 한 가지는'($ query-> num_rows() = 0) && ($ query-> num_rows() == 1)'을')'. 이렇게하면'$ query-> num_rows()'호출 수가 줄어 듭니다. 결과가 '1'일 때 항상 '0'보다 큽니다. – mixable
성능이 얼마나 끔찍한가요? 실행하는데 얼마나 걸리나요? 첫 번째 쿼리에서 가져온 각 데이터 행에 대해 2 개의 데이터베이스 쿼리를 수행합니다. 따라서 잠재적으로 db에 약 15,000 건의 호출이 발생합니다. – Jeemusu
@Jeemusu - CRON 일이라고 생각합니다. 첫 번째 테이블을 검사하고 두 번째 테이블에서 데이터가 없는지 확인합니다. 10 분 이상 걸립니다. – Hacker