laravel查询语句指定索引(强制索引)

Posted 李傲强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel查询语句指定索引(强制索引)相关的知识,希望对你有一定的参考价值。

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!

转发请注明出处!

以上是关于laravel查询语句指定索引(强制索引)的主要内容,如果未能解决你的问题,请参考以下文章

索引Hint提示(INDEX Hint)

mysql force index 简单使用

微软的mssql有没有象oracle一样的强制索引,如何使用?

mysql有那些索引?分别在啥场景使用

mysql force index() 强制索引的使用

MYSQL中常用的强制性操作(例如强制索引)