私は 2 つのクエリを実行する手順を作成しました。
これらのクエリの手順を作成しました。同じ結果が返されますが、単純なクエリの 5 倍の時間がかかります。
手続きに時間がかかるのはなぜですか?手順は単純なクエリよりも高速であることを読みました。
私の簡単なphpメソッド
function getOutStandingBalance($OID)
{
$strSQL = "select sum(amount) from t where isdeleted=0 and iscredit=1 and oid='1212'";
$Result1 = $this->ADb->ExecuteQuery($strSQL);
$CreditSum = $Result1->fields[0];
$strSQL = "select sum(amount) from t where isdeleted=0 and iscredit=0 and oid='1212'"; $Result2 = $this->ADb->ExecuteQuery($strSQL);
$DebitSum = $Result2->fields[0];
$OutStandingBalance = sprintf("%2.2f",$CreditSum - $DebitSum);
echo $OutStandingBalance;
}
私の手順
DELIMITER $$
CREATE PROCEDURE `getOutStandingBalance`(OUT Total DECIMAL(16,2),IN OID INT)
DETERMINISTIC
COMMENT 'A procedure'
BEGIN
DECLARE Credit DECIMAL(16,2);
DECLARE Debit DECIMAL(16,2);
SELECT SUM(t.Amount) INTO Credit FROM `t` WHERE t.IsDeleted=0 AND t.IsCredit=1 AND t.OID=OID;
SELECT SUM(t.Amount) INTO Debit FROM `t` WHERE t.IsDeleted=0 AND t.IsCredit=0 AND t.OID=OID;
SET Total = IFNULL(Credit, 0) - IFNULL(Debit, 0);
END$$
DELIMITER ;
プロシージャー呼び出しを使用した PHP スクリプトと、ベンチマークを使用した単純な php クエリ呼び出し
$begin = microtime(true);
$chkAmount = $myTransaction->getOutStandingBalance(1212);
echo $chkAmount;
echo "<br />";
$end = microtime(true);
echo "Time taken for normal:", $end - $begin;
$norml = $end - $begin;
echo "<br />";
echo "<br />";
$begin = microtime(true);
$stmt = "CALL getOutStandingBalance(@Total,1212)";
$rsstmt = "SELECT @Total;";
$rs = $myADb->Execute($stmt);
$rsstmt = $myADb->Execute($rsstmt);
echo $rsstmt->fields[0];
echo "<br />";
$end = microtime(true);
echo "Time taken for Procedure:", $end - $begin;
$procd = $end - $begin;
if($norml>$procd)
{
echo "<br> Procedure is Fast.";
}
else
{
echo "<br> Normal Query is Fast.";
}