Maison > cadre php > Laravel > Les enregistrements d'apprentissage Laravel forcent l'index spécifié pour la requête

Les enregistrements d'apprentissage Laravel forcent l'index spécifié pour la requête

藏色散人
Libérer: 2021-11-05 14:20:45
avant
2620 Les gens l'ont consulté

La base de données n'utilise pas l'index que nous avons imaginé pour les requêtes SQL, ce qui entraîne une requête extrêmement lente.

Instruction de requête d'index de force mysql数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。

mysql强制索引查询语句

  • select * from user where age = 26 force index(age); // 强制索引

  • select * from user where age = 26 use index(age); // 优先按照这种索引查找

select * de l'utilisateur où age = 26 force index(age); // Force index
select * from user which age = 26 use index(age); // Prioriser la recherche en fonction de cet index

/**
 * 检测某个表中是否存在某个索引
 * @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);
    }
}
Copier après la connexion

Vous devez écrire ceci dans le code Laravel :

Utilisez la méthode when pour juger ici Cet index existe-t-il ? S'il n'existe pas, cet index ne sera pas utilisé. Sinon, une erreur sera signalée pour empêcher quelqu'un de supprimer accidentellement l'index, ce qui entraînerait le signalement d'une erreur par le système.

La déclaration pour forcer l'indexation ici est : 🎜
->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'))
Copier après la connexion
🎜Par exemple : 🎜
$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']);
Copier après la connexion
🎜[Recommandations associées : 🎜Les cinq derniers didacticiels vidéo Laravel🎜]🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal