在做数据库查询过程中,遇到跨表查询,即需要用到另一张表的ID来列出当前表的记录,通常情况我们会想到跨表查询,结合子查询只要使用一句SQL语就可以解决问题,例如:$sql="select * from table1 where Id not in(select QuestionId from table2 where UserName='".$UserName."')",大多数初级开发者都认为,用查询关键肯定是最优的实现方法,所以大都初级开发都会用到in或exists等语句,对数据记录比较少的两张表查询,但没有明显示区别,但是当记录才达到几万条,同时有十几个人访问,就会明显感觉到延时,所谓的卡机,就是算法执行的效率不高出现的原因,针对这样的情况,我们建议开发者尽量避免使用这些关键词那么用什么方法解决这种问题呢?
解决方法是,我们可以用最原始的嵌套循环,第一把子查询的中的ID一个个读出来,再在table1 中进行查询,这样执行的速度比较快.代码如下所示:
$sql="select QuestionId from table2 where UserName='".$UserName."'";
$result=$conn->query($sql);
if ($result)
{
while($row = $result->fetch_array())
{
$psql ="select * from table1 where id=".$row['QId'];
$presult = $conn->query($psql);
if ($presult){
$rowp = $presult->fetch_array();
…… }
}
百恒技术工程师建议大家,若是小型数据查询,使用in,exists是没有任何问题,尽量缩小双边的查询范围,以减轻资源的消耗.对于大型数据查询,尽量不要用.
希望此文章能对广开发者有所帮助,原创文章出自:百恒网络 如转载请注明出处!专业,专注于南昌网站建设,为用户提供高品质的网络产品及优质服务是我们始终的追求.