Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数据库中是否存在记录:单步还是两步?_Php_Mysql_Database - Fatal编程技术网

Php 检查数据库中是否存在记录:单步还是两步?

Php 检查数据库中是否存在记录:单步还是两步?,php,mysql,database,Php,Mysql,Database,假设您希望从数据库中获取一条记录,该记录返回大量数据并需要多个联接 所以我的问题是,使用一个查询来检查数据是否存在并获得结果是否更好?或者做一个更简单的查询来检查数据是否存在,然后检查id记录是否存在,再次查询以获得知道它存在的结果 例如: 3表a、b和ab(连接表) 或 如果存在,则执行上面的查询 所以我不知道是否有任何理由做第二件事。你知道这会如何影响数据库性能吗?或者这有什么关系吗?通常查询中最慢的部分是过滤器,然后是索引搜索、连接等。如果需要传输大量数据,那么传输也很耗时。如果检查是否存

假设您希望从数据库中获取一条记录,该记录返回大量数据并需要多个联接

所以我的问题是,使用一个查询来检查数据是否存在并获得结果是否更好?或者做一个更简单的查询来检查数据是否存在,然后检查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)";