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查询语句指定索引(强制索引)的主要内容,如果未能解决你的问题,请参考以下文章