zoukankan      html  css  js  c++  java
  • laravel查询语句指定索引(mysql强制索引)

    1.直接上图,如下是查询的原生sql:

     1 EXPLAIN SELECT
     2     `erp_agents`.`company_id`
     3 FROM
     4     `erp_agents` FORCE INDEX (`test`)
     5 LEFT JOIN `erp_positions` ON `erp_positions`.`id` = `erp_agents`.`position_id`
     6 WHERE
     7     `erp_agents`.`status` IN ('预离职', '正常')
     8 AND `worked_at` <= '2018-09-30 23:59:59'
     9 AND `is_suppose` = '0'
    10 AND `erp_agents`.`company_id` = '2'
    11 AND `erp_agents`.`deleted_at` IS NULL
    12 AND `erp_agents`.`company_id` = '2'

    2.在laravel的代码里面需要这样写,如下图:

    在这里用when方法来判断此索引是否存在,日过不存在的话就不用这个索引,不然会报错,避免有人误删索引后,导致系统报错。

    此处强制索引的语句是:

    ->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'))
    $agents = Agent::where($whereType)
                ->when(hasIndex('Agent', 'test'),function ($q){
                    $q->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'));
                })
                ->when(request('position',false),function ($q){
                    $q->whereIn('position_id',request('position'));
                })
                ->whereIn('agents.status', $validStatus)
                ->where('worked_at', '<=', $end)
                ->where('is_suppose', 0)
                ->addDomination('m.statistics-human-view')
                ->leftJoin('positions', 'positions.id', '=', 'agents.position_id')
                ->get(['worked_days', 'worked_at']);

    over!

    转发请注明出处!

  • 相关阅读:
    wes7配置
    一个很牛逼的工具XueTr
    构造一个好控制一点的长期工作线程
    SmartGit初步使用
    Android开发(一):环境搭建
    zabbix使用短信猫实现报警
    Build Libsvm to dll
    Using OpenCV in VS2012
    My Overlay Icons is Missing
    用Eclipse开发C、C++
  • 原文地址:https://www.cnblogs.com/qaing123/p/9767917.html
Copyright © 2011-2022 走看看