ホームページ > PHPフレームワーク > Laravel > Laravel 学習レコードはクエリに対して指定されたインデックスを強制します

Laravel 学習レコードはクエリに対して指定されたインデックスを強制します

藏色散人
リリース: 2021-11-05 14:20:45
転載
2620 人が閲覧しました

なぜ強制的にインデックスを作成する必要があるのでしょうか?

データベースは、SQL クエリ用に想定されていたインデックスを使用しないため、クエリが非常に遅くなります。

mysql 強制インデックス クエリ ステートメント

  • select * from user where age = 26 Force Index(age); / / Forceindex

  • select * from user where age = 26 useindex(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']);
ログイン後にコピー
[関連する推奨事項:

最新の 5 つの Laravel ビデオ チュートリアル ]

以上がLaravel 学習レコードはクエリに対して指定されたインデックスを強制しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート