检查DB中是否存在记录:单步还是两步?

时间:2010-04-14 09:50:07

标签: php mysql database

假设您想从数据库获取记录,该记录返回大量数据并需要多个连接。

所以我的问题是,使用单个查询检查数据是否存在并获得结果(如果存在)是否更好?或者做一个更简单的查询来检查数据是否存在然后id记录存在,再次查询以获得结果,知道它存在。

示例:

3表a,b和ab(联结表)

select * from 
from a, b, ab 
where condition
and condition 
and condition 
and condition etc...

select id 
from a, b ab 
where condition

然后如果存在则进行上述查询。

所以我不知道是否有任何理由做第二次。任何想法如何影响数据库性能或根本不重要?

3 个答案:

答案 0 :(得分:3)

通常查询中最慢的部分是过滤器,然后是索引搜索,连接等。如果需要传输大量数据 - 传输也很耗时。如果检查存在然后提取数据,它将慢两倍。只需提取数据。如果它在那里你得到它,如果没有 - 你什么也得不到。

从多个表中提取时,JOIN更快,更灵活。

答案 1 :(得分:1)

当结果必须分页或缓存时,我通常更喜欢“两个查询”方法。例如:

$found_ids = "select id from products where ...complex $condition...."

maybe add to cache ($condition => $found_ids)

$ids_to_show = array_slice($found_ids, $_GET['page'], $pagesize);

$data = "select * from products, more tables ... where products.id IN($ids_to_show)";

由于第一个查询可能会返回一个可能很长的id列表,因此获取所有ID的数据将非常浪费时间。

答案 2 :(得分:0)

如果您关心运行时,应该考虑另一个注意事项。避免在select语句中使用'*'。它可能是一个简单的注释,但它直接影响查询的运行时。更新select语句,使用别名,索引u'r键并仅选择所需的字段。