一些sql语句
1:
$queryauth = Usergara::leftJoin('userdetails as ued', 'ued.ub_id', '=', 'usergara.ub_id')
->leftJoin('userba as ub', 'ub.ub_id', '=', 'usergara.ub_id')
->where(['ued.ud_userauth' => 1, 'usergara.ug_vehicle_auth' => 1])
->where('ub.ub_time', '>', date('Y-m-d H:i:s', strtotime('-7 days')))
->whereNotExists(function ($query) {
$query->select('gid')
->from('wzcar')
->whereRaw('ug_id = gid and status = 1');
})
->select('ub.ub_id', 'usergara.ug_id', 'usergara.ug_engine', 'usergara.ug_frame_number', 'usergara.ug_plate_title', 'usergara.ug_plate')
->get();
来看下数据类型不一致时的 Oracle 的查询解释计划:
select .. from xxx where xx_no = 20200400001
结果:导致隐式转换,全表扫描
当字段类型和查询条件数据类型不一致的时候,如果没有转换函数,就会默认隐式转换,当数据类型不能隐式转换时就会报错。
再看下数据类型一致时的 Oracle 的查询解释计划:
select .. from xxx where xx_no = '20200400001'
结果:唯一索引扫描
再看下两个 SQL 的 IO、CPU 耗费,全表扫描和走唯一索引时的效率真是差距太大,全表扫描是大忌!
还好这个表的数据不是很大,不然后果会不堪设想。。
所以在工作中,应该要避免隐式转换,要使用显式转换(转换函数,),遵循 "字段是什么类型,就用什么类型的" 的原则,多用查询分析器检查下
3、laravel中以执行迁移文件的方式 为一个表增加字段时,前提是这个表一定要是先存在的
php artisan make:migration add_votes_to_users_table--table=students//给students表增加votes字段
生成migration迁移文件
4、
elseif (!empty($startTime) || !empty($endTime)) { $list = OpenMachineRel::where($where) ->where(function ($q) use ($startTime, $endTime) { if (empty($startTime)) $startTime = '1970-01-01 08:00:01'; if (empty($endTime)) $endTime = '2038-01-01 23:59:59'; $where = [['mr_endTime', '>=', $startTime . ' ' . "00:00:00"], ['mr_startTime', '<=', $endTime . ' ' . "23:59:59"]]; $orwhere = [['mr_startTime', '<=', $endTime . ' ' . "23:59:59"], ['mr_endTime', '>=', $startTime . ' ' . "00:00:00"]]; $q->where($where) ->orwhere($orwhere); }) ->orderBy('mr_startTime', 'desc') ->get()->toArray();