Schnelligkeit von Datenbankabfragen...

  • SQL

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Schnelligkeit von Datenbankabfragen...

    Hallo Community
    Ich befasse mich erst seit kurzem wieder mal mit Datenbanken... bisher habe ich ( und aufgrund von Faulheit wahrscheinlich) Datenbanken nicht gebraucht
    habe stattdessen Textdateien verwendet und mir die "Datensätze" zeilenweise dort eingetragen.

    nun hätte ich den Ansporn weiter in die Materie einzutauchen
    und stoße hier auf ein Verständnisproblem bei dem ich hoffe jemand kann mir die Frage(n) beantworten...


    Wie läuft eine Datenbankabfrage bsp MySQL intern ab?
    Theoretisch muss auch die Abfrage Datensatz für Datensatz durchackern und mir die Ausgabe der Daten liefern die auf meinen Suchkriterien entsprechen... oder? (Klar wie sonst)
    meine Frage ist .... Wie schnell läuft das ab?


    Beispiel

    ich habe mir eine Textdatei (wie üblich) mit 1.000.000 fiktiven Datensätzen erstellt
    wenn ich in PHP diese Datei öffne und durchlaufen lasse
    braucht das bis zum letzten Eintrag etwa 0,8 sekunden wenn dann noch Abfragen zukommen < > = was auch immer...
    werden es etwa 1,5 sekunden (auch nicht viel)

    wenn ich das jetzt hochrechne auf 10 Millionen hochrechen sind das 15 Sekunden für die Abfrage

    läuft das in einer Datenbank ähnlich ab wie in meiner Beschreibung?

    oder wo ist der krasse Unterschied.

    Danke und LG
    fx
    Der Unterschied liegt in der Auswahlmöglichkeit - im SQL, um genau zu sein.
    Wenn du von deiner Db nur ganze Tabellen abrufen willst, dann sind deine TextDateien unschlagbar.
    Wenn du aber erwägst, dem User vlt. nicht alle 10 Millionen Datensätze aufeinmal zumuten zu wollen, dann ist eine Db vlt. nicht die schlechteste aller Optionen.

    Ein weiterer Punkt ist das relationale Datenmodell, was einer Db zugrundeliegen kann und sollte:
    Man kann irre komplexe Zusammenhänge in einer Db relational modellieren, ohne dabei DatenRedundanz und Konsistenz-Probleme zu verzapfen (darauf steht übrigens die Todesstrafe).

    Noch ein Punkt ist die Multi-User-Unterstützung:
    Wenn mehrere User gleichzeitig deine TextDatei ändern wollen hast du ein ernstes ernstes Problem.
    Bei einer Db ist solch ebenfalls ziemlich problematisch, aber immerhin lösbar.

    Ich rate dir übrigens davon ab, gleich mit einer Db anzufangen (und schon garnet MySql).
    Weil vmtl. hast du von relationaler Datenmodellierung keine Vorstellung.
    Du würdest also grauenhaft an der armen Db herum-dilettieren, und o.g. Todesstrafe wäre leider kaum zu vermeiden.

    relationale Datenmodellierung erlernt man aber besser ohne Db.
    Ach - ich mach hier mal schluss - üblicherweise wollen die Leute das nicht hören. Falls es dich doch interessiert, kannste ja nachfragen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Dazu kommt noch die Möglichkeit Indexe/indizes zu definieren, die Abfragen ungeheurlich beschleunigen können, wenn richtig angelegt.

    Hatte z.B. eine Tabelle, in der wurden Dateien aller Art in einem BLOB Feld gespeichert. Irgendwann kam dann von Usern die Meldung, dass das Aufrufen gewisser Funktionen, die auch diese Tabelle zeigten (gefiltert natürlich) ungeherulich langsam waren. um aus vllt. 1000 Datensätzen 6 rauszufiltern hat über 20 Sekunden gedauert. Einen Index später, lief das im niedrigen Millisekundenbereich, mitsamt der Übertragung der Dateien.
    Ist natürlich ein Extrembeispiel, da es ungewöhnlich ist, dass man ganze Dateien in eine DB schreibt (und ich hatte eigentlich erwartet, dass MySQL schlauer ist, als tatsächlich einen vollen Tablescan mitsamt der BLOB Felder zu machen, wenn man eine Bedingung auf andere Felder hat), dennoch zeigt es ziemlich gut, wofür Indexe/Indizes existieren.
    Servus,

    hier hin: datenbanken-verstehen.de/datenbank-grundlagen/
    Lies alles aufmerksam und zieh' dir auch andere Lektüre rein wie z.B. über die von @EaranMaleasi (der übrigens die Antwort auf die eigentliche Frage geliefert hat) erwähnten Indexes (oder hier), Redundanz bzw. Datenbankredundanz, Normalformen (siehe auch relationales Datenbankmodell) und Beziehungen.

    ​Ach - ich mach hier mal schluss - üblicherweise wollen die Leute das nicht hören

    Sinn und Zweck ist ja auch nicht das zu erzählen was die Leute hören wollen sondern das wovon man selbst überzeugt ist und gute Erfahrungen gemacht hat - du tust gerade so als ob du hier nicht frei sprechen bzw. schreiben dürftest du alter Dramatiker. Dennoch bin ich zu pragmatisch veranlagt um dem vollends zuzustimmen, ich sage immer man lernt's am besten durch's Machen.

    ​Ich rate dir übrigens davon ab, gleich mit einer Db anzufangen

    Sondern ... ? Du kannst nicht einfach sagen "so soll das nicht" und dann das "so muss das" weglassen.

    ... ​und schon garnet MySql

    Weil Begründung und so...


    Link :thumbup:
    Hello World
    Hallo ihr lieben

    nachdem ich nur etwa die hälfte vom ErfinderDesRades verstehe was Datenbanken angeht
    denke ich wohl dass meine Absichten mit Textdatein umzusetzen sind.

    Mir ging es ledglich drum zu wissen ob Datenbanken mit großen Datenmengen explizte datensätze ausgeben können oder ob die ebenfalls alles durchlaufen müssen.
    (Auch das Thema indizes)

    vielen dank für die hilfe...
    hat mir geholfen.
    fx
    Hi,

    siehe auch stackoverflow.com/questions/2356851/database-vs-flat-files

    Mit einer Datenbank fährst du insgesamt besser, denn du kannst ja deine Abfragen mit Bedingungen formulieren und zudem die Sortierung festlegen sowie ein Limit. Diese Filter und Limitierungen kannst du bei Textdateien ja erst nutzen nachdem du alle Datensätze geholt hast, was offensichtlich unperformanter ist (klar kannst du die Daten zeilenweise lesen, aber was nützt dir das wenn der Datensatz den du suchst zufällig einer der letzten ganz am Ende der Datei ist).

    Link :thumbup:
    Hello World

    Link schrieb:

    du kannst ja deine Abfragen mit Bedingungen formulieren und zudem die Sortierung festlegen
    Du gewinnst dabei aber nur Performance, wenn ein Index auf den jeweiligen Spalten liegt.
    Ansonsten müsste auch ein SELECT die ganze Tabelle durchrattern.

    Also: Bei großen Datenmengen Indexe verwenden!
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Link schrieb:

    Sondern ... ? Du kannst nicht einfach sagen "so soll das nicht" und dann das "so muss das" weglassen.
    wieso nicht? will doch eh niemand wissen. und wenn doch kanner ja fragen - das sagte ich ja aber auch.
    Weil meine Erklärungen werden ziemlich wortreich und dann zu 80% doch für Katz.