Heim  >  Artikel  >  PHP-Framework  >  Laravel-Lerndatensätze erzwingen einen angegebenen Index für die Abfrage

Laravel-Lerndatensätze erzwingen einen angegebenen Index für die Abfrage

藏色散人
藏色散人nach vorne
2021-11-05 14:20:452543Durchsuche

Die Datenbank verwendet nicht den Index, den wir uns für die SQL-Abfrage vorgestellt haben, was zu einer extrem langsamen Abfrage führt.

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

mysql强制索引查询语句

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

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

select * from user where age = 26 force index(age); // Force index
select * from user where age = 26 use index(age); // Priorisieren Sie die Suche nach diesem 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);
    }
}

Sie müssen dies im Laravel-Code schreiben:

Verwenden Sie hier die when-Methode, um zu beurteilen Existiert dieser Index? Wenn er nicht vorhanden ist, wird dieser Index nicht verwendet. Andernfalls wird ein Fehler gemeldet, um zu verhindern, dass jemand den Index versehentlich löscht, was dazu führt, dass das System einen Fehler meldet.

Die Anweisung zum Erzwingen der Indizierung lautet hier: 🎜
->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'))
🎜Zum Beispiel: 🎜
$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;]);
🎜[Verwandte Empfehlungen: 🎜Die neuesten fünf Laravel-Video-Tutorials🎜]🎜

Das obige ist der detaillierte Inhalt vonLaravel-Lerndatensätze erzwingen einen angegebenen Index für die Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen