本文带大家学习Laravel之强制指定索引进行查询,希望对大家有所帮助。
为什么需要强制索引?
数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。
mysql强制索引查询语句
select*fromuserwhereage=26forceindex(age);//强制索引select*fromuserwhereage=26useindex(age);//优先按照这种索引查找/***检测某个表中是否存在某个索引*@param$table*@param$index*@returnbool*@authorzhaohao*@date2019-08-2617:42*/if(!function_exists('hasIndex')){functionhasIndex($table,$name){$conn=IlluminateSupportFacadesSchema::getConnection();$dbSchemaManager=$conn->getDoctrineSchemaManager();$doctrineTable=$dbSchemaManager->listTableDetails($table);return$doctrineTable->hasIndex($name);}}
在laravel的代码里面需要这样写:
在这里用when方法来判断此索引是否存在,日过不存在的话就不用这个索引,不然会报错,避免有人误删索引后,导致系统报错。
此处强制索引的语句是:
->from(DB::raw('`erp_agents`FORCEINDEX(`test`)'))
例如:
$agents=Agent::where($whereType)->when(hasIndex('Agent','test'),function($q){$q->from(DB::raw('`erp_agents`FORCEINDEX(`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']);
产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;
日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉;
本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;
部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入;
如若转载,请注明出处:https://www.chanpinyuan.cn/42906.html;