sql多表查询优化问题
发布网友
发布时间:2022-04-08 00:04
我来回答
共3个回答
热心网友
时间:2022-04-08 01:33
这样的语句是用来教学的,数据量不大的时候可以,数据量大的时候当然不行。
左连接的意思是列出左边表所有的记录,右边表如果匹配,就给出右边表的字段,否则输出空值。左连接是相当耗资源的,尽量避开。
实际在脚本里是分开处理的就是先把左边的表都查出来,然后按连接字段遍历各个表,这样速度就快多了。
比如php脚本:
$sql="select * from new_infor_paper where ZS_ID='1949';"
$rows=$db->getAll($sql);
for($i=0;$i<count($rows);$i++)
{
$row1=$db->getRow("select * from new_infor_student where zs_ID='".$rows[$i]['ZS_ID']."'");
$row2=$db->getRow("select * from new_test_infor2 where zs_ID='".$rows[$i]['ZS_ID']."'");
.....
...
}
这样懂了吧?追问懂个大概~可是asp里不知道怎么实现- -
追答asp里一样的的道理,语法不同了,先得到第一个sql的数据集,按其他表的连接字段做where条件,遍历查询其他表。这样的效率就是1+1+1+...的关系,而不是你那个左连接乘的关系。
热心网友
时间:2022-04-08 02:51
select a.* from new_infor_paper a,new_infor_student b,new_test_infor2 c,new_infor_teacher d,
xiaoyinchengji e, xiaoyinway f ,zi_yin g
where a.zs_ID='1949' and a.zs_ID=b.zs_ID and a.zs_ID=c.zs_ID and a.teacher_name=d.teacher_name and a.zs_ID=e.zs_ID
and a.zs_ID=f.zs_ID and a.serial_of_outline=g.serial_of_outline
and b.zs_ID=e.zs_ID
热心网友
时间:2022-04-08 04:26
其实你只是查询 a.zs_ID='1949'的相应记录,可以直接b.zs_ID='1949',c.zs_ID='1949',e.zs_ID='1949',f.zs_ID='1949',这样应该会快点吧,你试下吧追问可是a.zs_ID='1949'只是想说让他的查询记录少一点 其实最终要的结果我没有where语句的 所以重点不在a.zs_ID='1949'上 = =
追答可以试下用inner吧,下面有相关的链接,你看一下吧,我之前没有搞过,你自己研究下吧。
http://hi.baidu.com/jiljil/blog/item/a451114c224953f4d72afc99.html