Ich habe eine Datenbank mit Millionen von Datensätzen. Die Tabelle ist wie:Milion Record Sql Sortieren nach und Zeilen zählen
Tabellenname: Datensatz
Filed1: Name (VARCHAR) (Primärschlüssel)
Field2: Record (int/Bigint)
Beispiel:
Name | Notieren
Darrin | 256
Aaron | 3
Daryl | 12
...
Ich muss wissen, welche Position die Benutzer mit dem Namen bedeutet 'Namex' in sortierter Datensätze.
Derzeit implementieren ich diese Lösung:
...
$name=namex;
$query= mysqli_query($mysqli,"SELECT Name FROM record ORDER BY Record DESC");
$x=0;
$rank=0;
if ($query->num_rows > 0) {
// output data of each row
while($row = $query->fetch_assoc()) {
if($row["Name"]==$name){
$rank=$x+1;
echo "Rank : $rank<br>";
break;
}
$x++;
}
}
...
Mit ihm und 1 Million Datensätze in der Datenbank, die Antwort in etwa 4 Sekunden kommt.
Ich habe versucht, einen Tabellenindex auf das Feld Record setzen, aber die gleiche Leistung geblieben sind.
Wie kann ich die Ausführungszeiten reduzieren?
'SELECT COUNT (Name) als Rang von Rekord WHERE name <= $ name' vielleicht ... natürlich Sie müssen die Abfrage parametrisieren, um Risiken der SQL-Injektion zu vermeiden –
Sie sollten wirklich eine 'where' Klausel verwenden. Du legst LITERAL das Äquivalent dazu an, zu einem Walmart zu fahren, das GESAMTE Inventar des Ladens aufzukaufen, es nach Hause zu fahren, es dann durchzusuchen und alles wegzuwerfen, außer dem Schokoriegel, den du haben wolltest. –
@MarkBaker außer er hat ORDER BY Record, nicht Name –