Kann ich einfach nur eine Spalte in MYSQL auswählen, um sie schneller zu machen?

8

Ich möchte so etwas tun:

%Vor%

Weil alles, was ich will, die Benutzer-ID ist, die dem Benutzernamen entspricht.

Der übliche Weg wäre folgender:

%Vor%

Aber gibt es etwas effizienteres als das? Vielen Dank, Grüße

    
eric01 01.05.2012, 20:53
quelle

6 Antworten

13

Sie haben den Nagel auf den Kopf getroffen: Was Sie tun möchten, ist SELECT userid FROM users WHERE username='$username' . Probieren Sie es aus - es wird funktionieren :)

SELECT * ist fast immer eine schlechte Idee; Es ist viel besser, die Namen der Spalten anzugeben, die MySQL zurückgeben soll. Natürlich müssen Sie mysql_fetch_assoc oder etwas Ähnliches verwenden, um die Daten tatsächlich in eine PHP-Variable zu bringen, aber zumindest spart dies MySQL den Aufwand, alle diese Spalten zu versenden, die Sie sowieso nicht verwenden.

>

Alternativ können Sie stattdessen die neuere mysqli-Bibliothek oder das PDO verwenden. Diese sind auch viel effizienter als die alte mysql-Bibliothek, die veraltet ist.

    
Daan 01.05.2012, 20:55
quelle
3

Der "übliche" Weg besteht darin, nur die Spalten auszuwählen, die Sie benötigen.

Jede Spalte, die Teil der Auswahl ist und nicht benötigt wird, verlangsamt den Abruf. Teilweise aufgrund des Netzwerkverkehrs und teilweise weil die Datenbank-Engine bestimmte Optimierungen anwenden kann, wenn nur einige Spalten ausgewählt sind.

Und select * ist im Produktionscode normalerweise verpönt.

    
a_horse_with_no_name 01.05.2012 20:55
quelle
3

Ihre Anfrage ist korrekt:

%Vor%

Dies funktioniert wenn es richtig gemacht wird . Beachten Sie, dass $username korrekt mit mysql_real_escape_string maskiert werden muss. Ich würde empfehlen, parametrisierte Abfragen zu betrachten, um das Risiko einer Unverwundbarkeit der SQL-Injection zu verringern.

Eine andere Sache, die Sie ändern können, ist mysql_result anstelle Ihrer Schleife:

%Vor%

Dies setzt voraus, dass Sie wissen, dass Sie nur eine Zeile erhalten.

    
Mark Byers 01.05.2012 20:55
quelle
3

Sie können nicht nur, aber Sie sollten. Leider haben zu viele junge Entwickler die Angewohnheit, viel zu viele Daten auszuwählen. Sobald Sie Ihre Abfrage ausführen, müssen Sie keine While-Schleife mehr ausführen, da nur ein Datensatz zurückkommt. Verwenden Sie stattdessen einfach Folgendes:

%Vor%

Der zweite Parameter von mysql_result() ist der Zeilenindex, den Sie abrufen möchten. 0 ist zuerst.

    
Sampson 01.05.2012 20:56
quelle
1

Ja, das ist eine großartige Optimierungspraxis!

Wenn Sie noch einen Schritt weiter gehen und es superoptimiert machen möchten, fügen Sie ein LIMIT hinzu, etwa so: $query=mysql_query("SELECT userid FROM users WHERE username='$username' LIMIT 1");

Dies setzt natürlich voraus, dass Sie erwarten, dass nur eine Benutzer-ID zurückgegeben wird und die Datenbank-Engine stoppt, sobald sie gefunden wird.

Aber das Wichtigste: IMMER ESCAPE / SANITIEREN SIE IHRE EINGABEDATEN ! (kann das nicht genug betonen)

    
Shomz 01.05.2012 21:12
quelle
0

Sie können dies mit einer einzigen Codezeile tun

%Vor%

Sie müssen eine Verbindung zur Datenbank wie unten gezeigt herstellen, bevor Sie diese verwenden

%Vor%

Dank an @samuel t thomas

    
niq 23.05.2016 09:16
quelle

Tags und Links