您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“l(fā)aravel怎么強(qiáng)制指定索引進(jìn)行查詢”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
數(shù)據(jù)庫沒有使用我們設(shè)想的索引進(jìn)行sql查詢,導(dǎo)致查詢特別慢。
select * from user where age = 26 force index(age); // 強(qiáng)制索引
select * from user where age = 26 use index(age); // 優(yōu)先按照這種索引查找
/** * 檢測某個表中是否存在某個索引 * @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); } }
在laravel的代碼里面需要這樣寫:
在這里用when方法來判斷此索引是否存在,日過不存在的話就不用這個索引,不然會報錯,避免有人誤刪索引后,導(dǎo)致系統(tǒng)報錯。
此處強(qiáng)制索引的語句是:
->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']);
“l(fā)aravel怎么強(qiáng)制指定索引進(jìn)行查詢”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。