以下代碼是我真實代碼的模型。當myFunction被調用時,我獲得了很大的性能提升。 myTable不超過幾百行,但調用myFunction會增加約10秒的執行時間。試圖在已經訪問該表的循環內訪問表的一行時是否存在固有的錯誤?MySQL性能同時訪問表
<select>
<?php
$stmt = SQLout ("SELECT ID,Title FROM myTable WHERE LEFT(Title,2) = ? ORDER BY Title DESC",
array ('s', $co), array (&$id, &$co_title));
while ($stmt->fetch()) {
if (myFunction($id)) // skip this function call and save 10 seconds
echo '<option value="' . $co_title . '">' . $co_title . '</option>';
}
$stmt->close();
function myFunction ($id) {
$stmt = SQLout ("SELECT Info FROM myTable WHERE ID = ?",
array ('i', $id), array (&$info));
if ($stmt->fetch()) {
$stmt->close();
if ($info == $something)
return true;
}
return false;
}
?>
SQLOUT基本上是:
$sqli_db->prepare($query);
$stmt->bind_param;
$stmt->execute();
$stmt->bind_result;
return $stmt;
你意識到你查詢'myTable' N + 1次,其中n是行權的數量? – tonyjmnz 2013-03-13 19:29:54
當你看到在循環中選擇,你知道某件事情正在做錯 – 2013-03-13 19:34:33
這就是我的問題:爲什麼不能myFunction,有它自己的局部變量和指針,獨立於主例程訪問myTable? – user2033684 2013-03-13 19:41:44