SQL 쿼리에 대해 우리가 상상했던 인덱스를 데이터베이스가 사용하지 않아 쿼리 속도가 매우 느려집니다.
mysql 강제 인덱스 쿼리 문数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。
select * from user where age = 26 force index(age); // 强制索引
select * from user where age = 26 use index(age); // 优先按照这种索引查找
select * from user where age = 26 force index(age) // 강제 인덱스
select * age = 26인 사용자 use index(age); // 이 인덱스에 따라 검색 우선순위를 지정합니다.
/** * 检测某个表中是否存在某个索引 * @param $table * @param $index * @return bool * @author zhaohao * @date 2019-08-26 17:42 */ if(!function_exists('hasIndex')) { function hasIndex($table, $name) { $conn = IlluminateSupportFacadesSchema::getConnection(); $dbSchemaManager = $conn->getDoctrineSchemaManager(); $doctrineTable = $dbSchemaManager->listTableDetails($table); return $doctrineTable->hasIndex($name); } }
이것을 라라벨 코드로 작성해야 합니다:
여기에서 인덱싱을 강제하는 명령문은 다음과 같습니다. 🎜->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']);🎜[관련 권장 사항: 🎜최신 5개의 Laravel 비디오 튜토리얼🎜]🎜
위 내용은 Laravel 학습 기록은 쿼리에 지정된 인덱스를 강제 적용합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!