Php 检查数据库中是否存在记录:单步还是两步?
假设您希望从数据库中获取一条记录,该记录返回大量数据并需要多个联接 所以我的问题是,使用一个查询来检查数据是否存在并获得结果是否更好?或者做一个更简单的查询来检查数据是否存在,然后检查id记录是否存在,再次查询以获得知道它存在的结果 例如: 3表a、b和ab(连接表) 或 如果存在,则执行上面的查询Php 检查数据库中是否存在记录:单步还是两步?,php,mysql,database,Php,Mysql,Database,假设您希望从数据库中获取一条记录,该记录返回大量数据并需要多个联接 所以我的问题是,使用一个查询来检查数据是否存在并获得结果是否更好?或者做一个更简单的查询来检查数据是否存在,然后检查id记录是否存在,再次查询以获得知道它存在的结果 例如: 3表a、b和ab(连接表) 或 如果存在,则执行上面的查询 所以我不知道是否有任何理由做第二件事。你知道这会如何影响数据库性能吗?或者这有什么关系吗?通常查询中最慢的部分是过滤器,然后是索引搜索、连接等。如果需要传输大量数据,那么传输也很耗时。如果检查是否存
所以我不知道是否有任何理由做第二件事。你知道这会如何影响数据库性能吗?或者这有什么关系吗?通常查询中最慢的部分是过滤器,然后是索引搜索、连接等。如果需要传输大量数据,那么传输也很耗时。如果检查是否存在,然后提取数据,则速度将慢两倍。只需提取数据。如果它在那里,你就得到它,如果没有,你什么也得不到
从多个表中提取时,
JOIN
更快、更灵活。如果您关心运行时,则应考虑另一个注意事项。避免在select语句中使用“*”。这可能是一个简单的注释,但它直接影响查询的运行时。更新select语句,使用别名、索引u'r键和仅选择所需字段。当结果必须分页或缓存时,我通常更喜欢“两个查询”方法。例如:
$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的数据将是相当浪费时间的
select id
from a, b ab
where condition
$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)";