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

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

藏色散人
藏色散人転載
2021-11-05 14:20:452557ブラウズ

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

データベースは、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(&#39;worked_at&#39;, &#39;<=&#39;, $end)
            ->where(&#39;is_suppose&#39;, 0)
            ->addDomination(&#39;m.statistics-human-view&#39;)
            ->leftJoin(&#39;positions&#39;, &#39;positions.id&#39;, &#39;=&#39;, &#39;agents.position_id&#39;)
            ->get([&#39;worked_days&#39;, &#39;worked_at&#39;]);

[関連する推奨事項:

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

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

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。