【发布时间】:2016-11-03 06:36:32
【问题描述】:
有一个带有innodb的mysql数据库,我想找到最快的方法来检查一行是否存在。
所以是不是更快:
$sql5 = "SELECT id, value FROM pc_taxes WHERE id = :taxId AND client_id = :clientID LIMIT 1";
$stmt5 = getaccessdata::getInstance()->prepare($sql5);
$stmt5->bindValue(':clientID', $client_id, PDO::PARAM_INT);
$stmt5->bindValue(':taxId', $taxID, PDO::PARAM_INT);
try {
$stmt5->execute();
$req5 = $stmt5->fetchAll(PDO::FETCH_ASSOC);
$countTaxVal = 0;
foreach ($req5 as $r5) {
$countTaxVal++;
}
} catch (Exception $e) {
}
if($countTaxVal>0){
$rowExist=true;
}
或者这个版本在非常大的记录上更快:
$sql5 = "SELECT COUNT(*) FROM pc_taxes WHERE id = :taxId AND client_id = :clientID LIMIT 1";
$stmt5 = getaccessdata::getInstance()->prepare($sql5);
$stmt5->bindValue(':clientID', $client_id, PDO::PARAM_INT);
$stmt5->bindValue(':taxId', $taxID, PDO::PARAM_INT);
numRows =0;
try {
$stmt5->execute();
$numRows = $stmt5->fetchColumn();
} catch (Exception $e) {
}
if($numRows >0){
$rowExist=true;
}
感谢您的建议。
【问题讨论】:
-
我已经搜索过,但从未找到 LIMIT 1 的 SELECT COUNT...
-
用限制计数真的没有意义......
-
如果找到一行,它会停止计数吗?所以它计算所有记录并且只输出一个?