2009-12-24 4 views
5

meisten Websites, die irgendeine Art von Benutzerprofil haben wird entweder etwas tun:Was ist das Beste für ein Profil, eine Nummer oder einen Namen?

profile.php u = 123445

oder auch:

profile.php u = jason? .Davis

Also bin ich neugierig, wäre es langsamer, einen Namen zu verwenden, um ein Profil mit php/mysql gegen eine Nummer zu suchen, um einen Profildatensatz nachzuschlagen?

Antwort

12

Ein String-Lookup wäre wahrscheinlich in jedem Fall wahrscheinlich langsamer als ein numerischer. Aber der Unterschied ist so gering, dass er nie bemerkt wird. Nicht bis Sie eine wirklich große Anzahl von Benutzern haben.

Aber check out SO: Sie tun beides.

http://stackoverflow.com/users/187606/pekka 

Die Nummer für blitzschnellen Datenbankzugriff.

Der Name für schönes Aussehen und Sichtbarkeit der Suchmaschine.

Keine Konflikte mit zwei Namen, da die ID verwendet wird, um den Datensatz zu suchen.

Ich denke, das ist das Beste aus beiden Welten und das Optimum.

Erfordert jedoch URL-Rewriting.

+0

Warum ist eine Zahl schneller als ein Name in einem DB-Lookup? (Angenommen, beide sind indiziert). –

+0

Ich bin kein Datenbankexperte, aber der gesunde Menschenverstand sagt mir, dass sogar ein Index (der die Umwandlung eines Teils des Strings in eine Datensatznummer ist) immer langsamer sein muss als ein direkter Verweis auf die Datensatznummer selbst. Unwahrscheinlich langsamer, aber immer noch langsamer. Korrigiere mich, wenn ich mich irre. –

+3

@Esteban, eine Zahl würde höchstwahrscheinlich als Ganzzahl mit fester Breite (z. B. 4 Byte) im Gegensatz zu einer (z. B.) 32-Byte-Zeichenfolge gespeichert. Der Vergleich wäre schneller, da weniger Daten vorhanden sind, aber wichtiger ist, dass jede Seite des Indexes mehr Datensätze speichern würde, was zu weniger Festplatten-I/O führen würde. – paxdiablo

-1

Wenn der Name ein Schlüssel in der Datenbank ist, sollten die Suchzeiten nicht zu unterschiedlich sein, und die Verwendung eines Namens würde Ihnen eine schönere URL geben, daher würde ich vorschlagen, Namen zu verwenden.

+0

Der Name besser nicht ein Schlüssel in einer Datenbank sein, oder Sie werden ein Problem haben, wenn ein anderes eg John Smith versucht, einen Account zu eröffnen. –

+0

Es sei denn natürlich, Sie sind glücklich, Benutzernamen wie John.Smith.76352574763 auszugeben :-) – paxdiablo

+0

Warten Sie, bedeuten die meisten Websites, dass Sie zwei Konten mit demselben Namen öffnen? –

2

Der Name wird besser lesbar und einfacher zu debuggen, aber Namen sind nicht garantiert, einzigartig zu sein, so dass es von einem uniqifier (ich glaube, das ist eigentlich ein Wort, in der Vereinheitlichung) zu z. Hängen Sie Ziffern an das Ende des Namens an.

0

Wenn Sie einen DB-Index verwenden, sollte er nicht merklich langsamer sein. Aber was passiert, wenn Sie zwei Jason Davises haben? UIDs sind nett, weil Sie Einzigartigkeit garantieren können.

1

Das Hauptproblem, das ich mit der Verwendung eines Namens sehe, ist nicht die Suchgeschwindigkeit, sondern die Tatsache, dass man Jason Davis nicht von Omaha, Nebraska und einem anderen Jason Davis aus Perth, Western Australia haben kann.

Verwenden Sie auf jeden Fall den Namen in allem, was die Welt sehen kann, aber um Eindeutigkeit zu gewährleisten, würde ich eine Ganzzahl-ID verwenden. Dies mag die Datenbankabfragen ebenfalls beschleunigen, aber das wäre für mich zweitrangig. Es ist zweifelhaft, ob die Verwendung einer Saite zu viel Angst für Ihre Anwendung verursacht.

0

Beide sind falsch. Sie möchten nicht, dass profile.php u = 12345 als Parameter angegeben wird. Sie möchten das Profil des Benutzers 12345 abrufen. Verwenden Sie daher/profile/12345.

lesen etwas über REST, es ist cool :)

0

wäre es langsamer sein, einen Namen zu verwenden, um ein Profil Nachschlag [...]?

Wenn Sie es getestet hätten, hätten Sie herausgefunden, dass es nicht genug Unterschied gibt, um sich daran zu stören. Wenn Sie sich Sorgen um die Leistung machen, sollte dies die letzte Sorge sein.

Verwandte Themen