sql语句

一些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

sql语句_第1张图片

结果:导致隐式转换,全表扫描

当字段类型和查询条件数据类型不一致的时候,如果没有转换函数,就会默认隐式转换,当数据类型不能隐式转换时就会报错。

再看下数据类型一致时的 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();

 

你可能感兴趣的:(sql语句)