> PHP 프레임워크 > Laravel > Laravel 학습 기록은 쿼리에 지정된 인덱스를 강제 적용합니다.

Laravel 학습 기록은 쿼리에 지정된 인덱스를 강제 적용합니다.

藏色散人
풀어 주다: 2021-11-05 14:20:45
앞으로
2620명이 탐색했습니다.

SQL 쿼리에 대해 우리가 상상했던 인덱스를 데이터베이스가 사용하지 않아 쿼리 속도가 매우 느려집니다.

mysql 강제 인덱스 쿼리 문数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。

mysql强制索引查询语句

  • 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);
    }
}
로그인 후 복사

이것을 라라벨 코드로 작성해야 합니다:

여기서 판단하려면 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']);
로그인 후 복사
🎜[관련 권장 사항: 🎜최신 5개의 Laravel 비디오 튜토리얼🎜]🎜

위 내용은 Laravel 학습 기록은 쿼리에 지정된 인덱스를 강제 적용합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿