Rumah >rangka kerja php >Laravel >Rekod pembelajaran Laravel memaksa indeks yang ditentukan untuk pertanyaan

Rekod pembelajaran Laravel memaksa indeks yang ditentukan untuk pertanyaan

藏色散人
藏色散人ke hadapan
2021-11-05 14:20:452603semak imbas

Mengapa saya perlu dipaksa untuk mengindeks?

数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。

penyataan pertanyaan indeks paksa 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);
    }
}
    Anda perlu menulis ini dalam kod laravel:
Gunakan kaedah bila di sini untuk menilai ini Sama ada indeks itu wujud Jika tidak wujud, indeks tidak akan digunakan Jika tidak, ralat akan dilaporkan untuk menghalang seseorang daripada memadamkan indeks secara tidak sengaja, menyebabkan sistem melaporkan ralat.

Pernyataan yang memaksa pengindeksan di sini ialah:

->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(&#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;]);
[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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam