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

Rekod pembelajaran Laravel memaksa indeks yang ditentukan untuk pertanyaan

藏色散人
Lepaskan: 2021-11-05 14:20:45
ke hadapan
2608 orang telah melayarinya

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);
    }
}
Salin selepas log masuk
    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`)'))
Salin selepas log masuk
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('worked_at', '<=', $end)
            ->where('is_suppose', 0)
            ->addDomination('m.statistics-human-view')
            ->leftJoin('positions', 'positions.id', '=', 'agents.position_id')
            ->get(['worked_days', 'worked_at']);
Salin selepas log masuk
[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!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan