/ SQL

4月11日 学习笔记

今天给某管理系统写了一个php的分页代码,其中用到了跨表查询,碰到了运行效率问题。

因为两个表的数据量都在千数量级,而我用的sql语句是

select * from BMJL,STU where BMJL.StuID=STU.ID ORDER BY BMJL.BMRQ desc limit $beg,30

据我猜测,mysql执行此语句的顺序是:

从BMJL和STU两个表中选择出BMJL.StuID=STU.ID 的所有记录;

然后再根据BMJL倒序排列;

最后从第$beg个数据开始选取30个数据.

刚刚说过两个表的数据量都是数千的,所以执行第一步的时候要耗费相当多的时间。

经测试,用的时间在10s左右,也就是说用户在打开这个分页的时候,要等待10秒左右才会得到结果。

而我希望mysql执行的顺序是:

把BMJL表根据BMRQ倒序排列;

从第$beg个数据开始选取30个数据;

最后才是从STU表中选出BMJL.StuID=STU.ID 的所有记录.

但是经过多方搜索,无果。

最后只好用一个笨办法,用多条语句来实现此功能:

$sql = "select * from BMJL ORDER BY BMRQ desc limit $beg,30"; $query = mysql_query($sql,$conn); $bmjl = array(); while($row = mysql_fetch_array($query)) { $id=$row[´StuID´]; $sql1 = "select Name from STU where ID=$id"; $query1 = mysql_query($sql1,$conn); $row1 = mysql_fetch_array($query1); $row[´Name´]=$row1[´Name´]; $bmjl[]=$row; }

不知道有没有哪位大神能用一句sql来实现这个功能?

2013年5月6日更新

卧槽,这TM不就是一个join的事么??当年连CURD都写不好……

4月11日 学习笔记
Share this