Rumah >rangka kerja php >Laravel >Rekod pembelajaran Laravel memaksa indeks yang ditentukan untuk pertanyaan
数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。
select * from user where age = 26 force index(age); // 强制索引
select * from user where 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`)'))Contohnya:
$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']);[Cadangan berkaitan:
Lima tutorial video Laravel terkini】
Atas ialah kandungan terperinci Rekod pembelajaran Laravel memaksa indeks yang ditentukan untuk pertanyaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!