假设您想从数据库获取记录,该记录返回大量数据并需要多个连接。
所以我的问题是,使用单个查询检查数据是否存在并获得结果(如果存在)是否更好?或者做一个更简单的查询来检查数据是否存在然后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
然后如果存在则进行上述查询。
所以我不知道是否有任何理由做第二次。任何想法如何影响数据库性能或根本不重要?
答案 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键并仅选择所需的字段。