情况一:
已知有两个表,一个用户表(user)一百万条数据,一个汽车表(car)一百万条数据,要求获取某个用户的信息和其名下汽车的信息
单独查
$info=Db::name('user')->where('id',56228)->find();//用户信息 $lists=Db::name('car')->where('a_id',56228)->select();//名下汽车信息
所花时间 0.025451s
联表查
$lists=Db::name('user')->alias('a')->field('a.name,a.birth,a2.name as car_num,a2.num') ->join('car a2','a.id=a2.a_id')->where('a.id',56228)->select();
所花时间 0.029048s
联表后 user表 只查一条
情况二:
表a mysql结构
表a2 结构
表a 通过paimai_id关联表a2
数据总量 1450000条
联表查询语句
for($i=1;$i<=100;$i++){
$num[]=$i;
}
echo '<pre>';
$where['a1.id']=['in',$num];
Debug::remark('begin');
$lists=Db::name('a')->alias('a1')->field('a1.name,a2.title')->join('a2','a1.paimai_id=a2.id')
->where($where)
->select();
var_dump($lists);
Debug::remark('end');
所用时间 0.033930
不联表查询
for($i=1;$i<=100;$i++){
$num[]=$i;
}
echo '<pre>';
$where['id']=['in',$num];
Debug::remark('begin');
$lists=Db::name('a')->where($where)->select();
foreach ($lists as $v){
$info=Db::name('a2')->where(['id'=>$v['paimai_id']])->find();
$data['name']=$v['name'];
$data['title']=$info['title'];
$datas[]=$data;
}
var_dump($datas);
Debug::remark('end');
所用时间 0.084358
感觉还是联表的好