Schorsch: was ist schneller?

mysql-datenbank -
Eine Tabelle mit vielen Daten, oder viele kleine Tabellen?
ich hab dummerweise keine idee, wie ich die geschwindigkeit von db-zugriffen testen kann, deshalb frag ich mal :)
konkretes beispiel:
db fuer n paar hundert leute, entweder ich erstelle fuer jeden user eine tabelle, 7 spalten, vier eintraege, oder aber ich erstelle eine tabelle mit 8 spalten (achte halt den usernamen) und dementsprechend 4*n paar hundert eintraege ...
ich halte die vielen kleinen tabellen fuer schneller, alleine schon, weil da der zugriff nicht jedesmal die grosse db durchlaufen muss, aber sicher bin ich mir nicht.

  1. Hi,

    Eine Tabelle mit vielen Daten, oder viele kleine Tabellen?

    wenn es sich um die selbe Form von Daten handelt, ist es kompletter Unsinn, das auf mehrere Tabellen aufzusplitten. Für die Geschwindigkeit sind Indizes da, der allgemeine Tabellenaufbau, und selbstverständlich die Statements an sich.

    ich hab dummerweise keine idee, wie ich die geschwindigkeit von db-zugriffen testen kann, deshalb frag ich mal :)

    Wenn Du in der Theorie nicht hinreichend bewandert bist: ausprobieren. Beide Varianten anlegen, optimieren und mehrere Hundert/Tausend/Millionen optimierte Zugriffe durchführen. In diesem Fall kannst Du Dir das aber sparen, weil Du, selbst wenn Du etwas an Geschwindigkeit gewinnen solltest, an einer Vielzahl anderer Ecken erhebliche Verluste einfährst.

    db fuer n paar hundert leute,

    Och Gottchen, ich dachte, Du redest hier von größeren Datenmengen... Wenn jeder dieser Leute mehr als 100.000 Datensätze hat, könnte ich Deine Bedenken ja verstehen :-)

    entweder ich erstelle fuer jeden user eine tabelle,

    Nein, Unfug. Niemals nie nie nicht. Ein relationales Datenmodell hat _nichts_ mit den eigentlichen Datensätzen zu tun.

    7 spalten, vier eintraege, oder aber ich erstelle eine tabelle mit 8 spalten (achte halt den usernamen) und dementsprechend 4*n paar hundert eintraege ...

    Je Sorte Daten eine Tabelle. Mache Dich mit dem Begriff "Beziehungen" vertraut. Tipps für DB-Anfänger findest Du im Forums-Archiv.

    ich halte die vielen kleinen tabellen fuer schneller,

    Ich nicht :-)

    alleine schon, weil da der zugriff nicht jedesmal die grosse db durchlaufen muss,

    Deshalb wurden Indizes erfunden.

    Cheatah

  2. Hi!

    Wenn Du 1.000.000 User hättest kämst Du wohl nicht auf die Idee für jeden eine eigene Tabele zu machen, wenn Du deutlich weniger hast ist der Geschwindigkeitsunterschied der DB-Abfrage selbst wohl nur marginal und fällt nicht wirklich ins Gewicht, der Aufbau der Verbindung, die Überrragungszeiten sind viel länger. Außerdem kann man mit Indizierung wahrscheinlich sogar deutlich schneller mit der großen Tabelle sein, als  mit vielen kleinen. Also solltest Du lieber die bessere Struktur wählen und eine Tabelle verwenden.

    Messen kannst Du das ganz einfach:

    <?
    function getmicrotime(){
        list($usec, $sec) = explode(" ",microtime());
        return bcadd ($usec,$sec,8);
        }

    $start = getmicrotime();

    // Deine Datenbankabfrage(n)
    // ...

    $ende = getmicrotime();

    $sekunden = $ende - $start;

    echo "Dauer: ".$sekunden." Sekunden";

    ?>

    So kannst Du messen was Du willst! Nur eine Abfrage, den geamten Zugriff mit Verbindungsaufnahme... mußt halt das was Du messen willst direkt zwischen $start und $ende schreiben.

    Könnest auch mehrere Sachen gleichzeitig messen, durch mehrere Starts und Enden, mußt Die Variablen nur unterschiedlich benennen, am Ende kannst Du dann alle möglichen Zeitunterschiede ausrechnen, das Prinzip sollte klar sein.

    Grüße
    Andreas