Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Lieber mehr Queries oder Daten doppelt speichern?

  1. #1
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665

    Question Lieber mehr Queries oder Daten doppelt speichern?

    Vorweg: PHP greift auf MySQL-Datenbank zu

    Je weniger Queries man an eine Datenbank hat desto schneller geht die generierung der PHP-Seite. Das sollte einleuchtend sein.

    Wenn ich nun 2 Tabellen habe - eine mit Usern und eine mit Allianzen (ja, es geht um vinsels ), dann muss ich z.B. zum Anzeigen einer Rangliste einen Query zum auswählen der User und für jeden User einen zum Abfragen des Allianznamen starten.

    Das ganze würde sehr viel schneller gehen, wenn ich den Allianznamen nicht nur in der 2. Tabelle sondern zusätzlich in der mit den Usern speichere.
    Das ist aber gegen die Regel, dass man seine Tabellen möglichst klein halten soll...

    Was von beidem wäre besser (es geht nur um Geschwindigkeit)?





    Zusätzlich ginge wohl noch ein einzelner Query auf beide Tabellen gleichzeitig - ich könnte mir vorstellen, dass der am schnellsten ist (oder nicht?), würde aber trotzdem gerne wissen, wie es bei den ersten beiden Möglichkeiten aussieht.

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmmm...

    Wenns wirklich nur um Performance geht, ist es O.K. alles in eine Tabelle zu tun.

    Ich muss auch derzeit einen String als Array benutzen, da ich sonst mit der Performance einfach nicht an die Vorgaben komme, aber in meinem Fall hat dies außer Regelbruch keine Folgen, da die Probleme, welche die Regeln verhinder wollen, nicht auftreten können.

    Bei dir is das was anderes:

    1.) Du hohlst die Redundanzen rein, bei jedem schließen einer Allianz musst du mehr speicher für den ganzen Namen, als bloß einen key aufwenden.
    2.) Was ist wenn ein User seinen namen ändern will. -> Arschlangsam....
    Geändert von Lin728 (19-08-2017 um 21:31 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.06.2002
    Ort
    Hof
    Beiträge
    154
    mach doch einfach einen tabellen join
    ( ja ich spiele auch vinsels :-) )
    Oder habe ich von Deiner Sprache nix verstanden

    Tabelle1 (Benutzer):

    uid
    username
    password
    usw

    Tabelle2 (Allianzen):

    aid
    aname
    ainfos

    Tabelle3 (BenutzerAllianzenZuordnung):

    aid
    uid

    Query:

    Code:
    SELECT
      u.username, a.nam
    FROM
      tabelle1 as u, tabelle2 as a, tabelle3 as au
    WHERE
      u.uid = au.uid AND
      au.aid = a.aid AND
      u.uid = "username"

  4. #4
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665

    Re: Hmmm...

    Original geschrieben von ceisserer
    Wenns wirklich nur um Performance geht, ist es O.K. alles in eine Tabelle zu tun.

    da die Probleme, welche die Regeln verhinder wollen, nicht auftreten können.

    Bei dir is das was anderes:
    öhm... erst sagst du, dass es ok ist, das in eine tabelle zu packen
    dann sagst du, dass es bei dir auch ging
    und danach sagst du, dass es bei mir aber was anderes ist -> verstehe ich so, dass es schlecht sei!?

    Original geschrieben von ceisserer
    1.) Du hohlst die Redundanzen rein, bei jedem schließen einer Allianz musst du mehr speicher für den ganzen Namen, als bloß einen key aufwenden.
    sry, kapier ich jetzt nicht, was du meinst

    Original geschrieben von ceisserer
    2.) Was ist wenn ein User seinen namen ändern will. -> Arschlangsam....
    man kann seinen namen nicht ändern

    Original geschrieben von ceisserer
    Wegen den 2 Queries wird schon niemand sterben :-)
    es ist ja für jeden user immer wieder ein query - oder kapiere ich da schon wieder was falsch?





    Original geschrieben von jwebworks
    mach doch einfach einen tabellen join
    mit joins hab ich mich noch nicht wirklich befasst ^^

    wegen dem tabellenaufbau:
    "users":
    -id
    -nickname
    -aid
    -usw.

    "alliances":
    -aid
    -name
    -usw.

    Original geschrieben von jwebworks
    Code:
    SELECT
      u.username, a.nam
    FROM
      tabelle1 as u, tabelle2 as a, tabelle3 as au
    WHERE
      u.uid = au.uid AND
      au.aid = a.aid AND
      u.uid = "username"
    das ist das, was ich mit "Query auf beide Tabellen gleichzeitig" meinte
    da ist ja gar kein "JOIN" drin!?

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2002
    Ort
    Hof
    Beiträge
    154
    Code:
    u.uid = au.uid AND
    au.aid = a.aid
    Das ist der join nur ne andere Schreibweise :-)
    Ist lesbarer als ... LEFT JOIN ... (IMHO)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •