需要根据db中记录的存在执行一些逻辑。由于这个功能会经常被调用,我想知道以下是否可以提高效率...
另请注意,该表是一个关联表(employee_id和department_id一起形成一个复合主键),因此只有一条记录符合条件。
例如:
<?php
function checkEmpDptAssoc($employee_id, $department_id)
{
$sqlQuery = sprintf("SELECT COUNT(*)
FROM employee_department ed
WHERE ed.employee_id = '%d'
AND ed.department_id = '%d'",
$employee_id,
$department_id);
$result = mysql_query($sqlQuery);
$row = mysql_fetch_assoc($result);
if ((int) $row['COUNT(*)'] > 0) {
return true;
} else {
return false;
}
}
?>
答案 0 :(得分:4)
EXISTS可能会更快一点,因为您只需确保一个存在。
SELECT 1 FROM DUAL
WHERE EXISTS (
SELECT *
FROM employee_department ed
WHERE ed.employee_id = '%d'
AND ed.department_id = '%d'
)
答案 1 :(得分:1)
也许你可以试试:
"SELECT ed.employee_id
FROM employee_department ed
WHERE ed.employee_id = '%d'
AND ed.department_id = '%d'
LIMIT 1"
由于您只需要检查是否存在单个记录,因此可能:
if (!empty($row)) {
return TRUE;
} else {
return FALSE;
}
[编辑:根据@ ColShrapnel的评论,我遗憾地忘记了]
# instead of above if...else condition:
return empty($row);
抱歉,我现在没有时间对此进行测试,但我可以说的是,如果您希望提高性能(将count()
与limit
放在一边),请从看看你是否可以在where子句中为列或两列添加索引,employee_id
和department_id
..如果employee_id
应该是唯一的,请将其设为唯一索引例如:
-- non unique
create index idx_employeeid on table(employee_department)
-- unique
create unique index idx_employeeid_unq on table(employee_department)
答案 2 :(得分:0)
what I am always talking about
的完美示例一个问题,绝对无处不在 关于一切非常重要的事情,关于一切的答案 一个可怜的孤独评论,这个问题唯一明智的答案。
您唯一需要关注的是正确索引 问题的其余部分,所有这些语法问题,运行THE SAME查询的各种变体都没有。
我能想到的唯一改进就是摆脱不必要的代码 选择1而不是计数(*),然后你可以只做
return (bool)mysql_fetch_assoc($result);
它不会影响代码的性能,但可能会影响编码器的性能。