Ich verwende mysql Datenbank, die nur eine Tabelle "data" mit 17,151257 rows.This Tabelle hat eine Spalte String hat. Ich möchte alle Zeilen, in denen String-Spalte enthält eine bestimmte Abfrage-String (gespeichert in „entered_query“ Variable) drucken, so dass ich verwendet folgende:mysql select-Abfrage-Optimierung und wie Grenze in mysql arbeitet
SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10
Wie offensichtlich obige Abfrage wird zu viel Zeit auszuführen .
Ich habe gelesen, dass Indizierung verwendet werden kann, aber wie in diesem Fall?
Ich habe auch daran gedacht, ganze Daten in 10 verschiedene Zeilen zu teilen und dann 10 parallele Abfragen mitperl DBI auszuführen.
Jetzt habe ich folgende Fragen:
- Wie die Ausführungszeit reduzieren?
- Ich habe gehört, dass "LIKE" in mysql-Abfrage die Indizierung vermeidet, gibt es also eine bessere Alternative für obige Abfrage?
- Wenn wir Grenze 10 in mysql Abfrage verwenden, dann tut mysql stoppt, sobald die Ausführung, wie es die ersten 10 Ergebnisse findet oder erste sucht es ganze Daten für bestimmte Abfrage dann die ersten 10 Ergebnisse
Ich hoffe, dass '$ inquired_query' nicht ganz enthält, was sein Name suggeriert. Andernfalls könnte dies eine Möglichkeit darstellen, um Ihre Abfragen zu beschleunigen, die Sie nicht möchten. – innaM
Was soll 'DISTINCT *' tun und gibt es eine untere Grenze für die Größe der eingegebenen Zeichenfolge? – innaM
@innaM DISTINCT * wird verwendet, um nur ein eindeutiges Tupel auszuwählen. $ entered_query enthält die Query, die von Benutzern eingegeben wird, um in der "string" -Spalte nach Tabelle "data" zu suchen. * Entschuldigung für die Auswahl eines verwirrenden Beispiels. –