溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel怎么強制指定索引進行查詢

發布時間:2021-11-05 14:35:08 來源:億速云 閱讀:447 作者:iii 欄目:編程語言

本篇內容介紹了“laravel怎么強制指定索引進行查詢”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!                           

為什么需要強制索引?

數據庫沒有使用我們設想的索引進行sql查詢,導致查詢特別慢。

mysql強制索引查詢語句

  • 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);
    }
}
  • 在laravel的代碼里面需要這樣寫:

在這里用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']);

“laravel怎么強制指定索引進行查詢”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女