2016-04-08 20 views
0

Dies ist mein Code:Meine Code-Suche ist wirklich langsam

$sql = "SELECT *,MATCH (CUIT,DENOMINACION) AGAINST ('%{$word}%') AS Score FROM cuits WHERE"; 
$sql_end = ''; 
foreach($words as $word) { 
    $sql_end .= " AND MATCH (CUIT,DENOMINACION) AGAINST ('%{$word}%' IN BOOLEAN MODE) AND BAJA=0 "; 
    $sql_end2 = "order by DENOMINACION limit $inicio, $TAMANO_PAGINA"; 
} 

Es ist sehr langsam. Wie kann ich die Geschwindigkeit verbessern?

+0

In welcher Sprache verwenden Sie diese Suche? Es ist hier nicht markiert. Wenn Sie schneller nach beliebigen Daten suchen möchten, verwenden Sie [Volltextsuchfunktionen] (http://dev.mysql.com/doc/refman/5.7/de/fulltext-fine-tuning.html). – tadman

Antwort

1

In der FULLTEXT-Suche ist es nicht sinnvoll, LIKE-style Wildcard-Zeichenfolgen % zu verwenden. Also, ändern Sie AGAINST ('%{$word}%') zu AGAINST ('{$word}') und sehen, ob es hilft.

Außerdem kann FULLTEXT mehrere Wörter gleichzeitig abgleichen, so dass es nicht notwendig ist, die gesamte MATCH-Klausel für jedes Wort zu wiederholen. Stattdessen versuchen

SELECT *,MATCH (CUIT,DENOMINACION) AGAINST ('word word word word') ... 

können Sie, wenn die Reihe von Wörtern eine Phrase ist, wollen Modus mit der boolean FULLTEXT- Modus zu stoppen und nutzen die natürliche Sprache als in Ihrer ersten MATCH Klausel gezeigt.

Beachten Sie, dass FULLTEXT tatsächlich sehr seltsam auf kleinen Tabellen mit weniger als ein paar hundert Zeilen funktioniert. Das erschwert das Testen auf kleinen Tischen.

Schließlich stellen Sie sicher, dass Ihr FULLTEXT-Index korrekt aufgebaut ist.

Verwandte Themen