拥有一个带有innodb的mysql数据库,我想找到检查行是否存在的最快方法。
这样做更快:
$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;
}
或者这个版本在非常大的记录上更快:
git remote set-url --push private <your-repo-url>
感谢您的建议。
答案 0 :(得分:1)
这并不重要。
请不要忘记与性能相关的问题。相反,只有当您遇到问题时,才会对解决方案感到烦恼。
对于您提出的问题,检查行是否存在的最快方法是以使查询中包含列的索引。这是正确的答案,这是您完成任务所需的一切。虽然特定的SQL语法并不重要。
因此,对于您的问题,您需要一个像id_client(id,client_id)
- 这使您的查询更快。
出于常识,我会说如果你不需要计算但只想要一个标志,那么选择那个标志:
$sql = "SELECT 1 FROM pc_taxes WHERE id = ? AND client_id = ? LIMIT 1";
$stmt = getaccessdata::getInstance()->prepare($sql);
$stmt->execute([$client_id,$taxID]);
$rowExist = $stmt->fetchColumn();
为了善良,请不要将查询包装到空的try catch中。你会开始这样做,你会深感遗憾。