Mysql & Optimierung



  • Hi!

    Wenn ich im Query einen Datensatz aus meiner Mysql-Datenbank lies, kann man nicht irgentwie den Datensatz-Count sich irgentwie "Merken". D.h. Wenn ich einen Datensatz auslese und diesen dann Update wäre es ja sinnlos zweimal in einem Query nach dem Datensatz mit WHERE id='x' zu suchen. Mann müsste es doch nur einmal suchen und dann den Count in einer Variable dann speichern.

    Aber das ist nur möglich wenn Mysql erlaubt zu Datensätzen zu springen. Mit WHERE id='x' wird ja dieser Datensatz in der Mysql-Tabelle gesucht.

    Ich hoffe ihr versteht was ich meine. Wenn nicht postet einfach 🙂

    Bye



  • Wenn id dein Primary Key ist, sucht er nicht wirklich. Also da brauchst du dir keine weiteren gedanken machen. Benutze einfach WHERE id=bla.



  • Hi!
    Klar sucht er. Was soll er denn sonst tun ? zu 100% richtig Raten ?
    Ich muss mir leider die Gedanken machen, ich ich meherer 1.000 bzw 10.000 zugriffe pro/sec haben werde.

    Bye



  • 1000 - 10000 Zugriffe pro Sekunde? Na gute Nacht... *g*

    Ich kenne nicht die genaue Implementation von MySQL. Aber der Primary Key ist doch dazu da, darüber den Datensatz anzusprechen. Die Datenbank wird also Vorkehrungen getroffen haben, das dies so schnell wie möglich geht.

    Zum Beispiel sortieren und dann Quicksearch. Oder eine Art Tabelle oder sowas.

    Eine andere Möglichkeit wäre, zwei Querys auf einmal zu machen (also so zu verschachteln, dass er den Datensatz nur einmal raussuchen muss).



  • Hi!
    Muss halt ein schneller Server sein 🙂

    Bye



  • So schnell ist kein Rechner der Welt...



  • Bevor du anfängst zu entwickeln, frage mal die richtigen MySQL Profis, die schon mal sehr Zeitkritische Datenbankzugriffe realisiert haben. Bei mir waren das immer nur so 10 die Sekunde 🙂



  • Hi!
    Bin schon mitten drin 🙂
    Wo find ich denn solch Mysql Spezies ?

    Bye



  • Die Profis findest du hier.
    1000 -10000 Zugriffe pro sekunde wirst du auf keiner Datenbank erreichen welche von einem normalen Rechner ausgeht.
    MYSQL stellt standardmäßig 100 Connect gleichzeitig ein. Diesen Wert kann man erhöhen.
    Ich hatte in meiner alten Firma diesen Wert auf 400 mit einem Dualpentium III 800 MHZ und 512 MB.

    Dadmit keine Probleme. Allerdings kommt es hier auch die Concurrent-Threads an die man einstellt.
    Diese waren bei mir auf 4.
    Update auf eine Tabele kann MYSQL sowieso nur nacheinander.
    Dh. Entweder werden die Selects gesperrt oder die INSERT/UPDATES.
    Selects haben Vorang. Die Anzahl der zwischengespeicherten INSERT/UPDATES lassen sich einstellen und dem Client sofort ein OK zurückzugeben.
    Dieser werden dann bei reier ZEIT in die DB eingefügt.
    Für soclhe Sachen empfehle ich aber das Buch MYSQL von Markt und Technik geschrieben von Paul Dubois.
    PrimKEY bedeutet voresrt nur, daß der Datensatz eindeutig identifiziert werden, was für einen Datenbank unumgänglich ist. Es können "NICHT" 2 gleiche Datensätze in einem Table bestehen.
    Ein Index auf eine Feld einer Tabelle bedeutet folgendes.
    Da alle Daten in einem File stehen muss die Datenbank jedesmal das File durchgehen um einen Datensatz zu suchen (Ist zwar etwas komplizierter aber ...)
    Für INDEX wird eine weitere Tabelle angelegt in der nur die INDEXSPALTE mit der Position im File gespeichert wird.
    Dieser Table ist im Normalfall kleiner und die DB braucht nicht solange zum durchsuchen. Dadurch bekommt sie sofort die Position des Datensatzes in der Table und springt sofort dorthin.
    Dies ist aber nur dann sinnvoll wenn die Tabelle nicht oft Upgedatet wird da jedesmal der Index neu angelegt werden muss. Weiters kommt es auf die Anzahl der INDEXE an. Viele INDEXE vergrößern wieder die Indextabelle und das suchen geht dadurch auch nicht schneller.
    Also kommt hier das richtige Datenbankdesign zum Zug.

    Nun zu deiner Frage. Den Datensatzcount kannst du sehr schnell abfragen da MYSQL den im Speicher hat und somit keine Anfrage an die Tabelle macht.
    SELECT COUNT(*) from wasauchimmer;

    Wenn der Index auf der ID liegt, welche INT(10) ist dann geht es mit where ID = X auch sehr schnell.
    Ein SELECT auf ID und ein anschließendes UPDATE kannst du nicht anders machen wenn du wissen willst welche Daten darin stehen.
    Wenn du ein INT-Feld im Datensatz hast den du z.B: um einen Hochzählen möchtest dann brauchst du lein SELECT.
    UPDATE tablename SET IDNUM = IDNUM + 1 where id = x;
    macht es auch.

    [ Dieser Beitrag wurde am 09.02.2003 um 09:42 Uhr von Unix-Tom editiert. ]



  • Hi!

    Erstmal, ich finde das von dir angegebene Buch nicht bei Amazon - MYSQL von Markt und Technik geschrieben von Paul Dubois.

    Das Problem ist, dass am Besten keiner zwei mal auf einen Datensatz zugreifen darf. Ich bin gerade dabei ein kleines Onlinespiel zu schreiben. Ich gehe davon aus, dass 1.000 bis 10.000 zugriffe pro/sec vorhanden sein werden und deswegen sollte die Datenbank zugriff/update routine sehr schnell sein.

    Es soll kein CGI Programm auf der Serverseite laufen. Alles wird in php geschrieben. Jeder User wird beim Aufruf der Seite neu Upgedatet.

    Jeder User hat auch nicht nur einen Datenbankzugriff, sondern ca. eine Zugriff von 3 verschiedenen Tabellen und bei manchen Tabellen wird der Datensatz geupdatet.

    Es dürfen so viele Zugriffe pro/sec sein, außer dass ein Datensatz gleichzeitig geupdatet wird. Das lesen ist ja im Prinzip egal.

    PS: Wenn jemand Bücher oder Links oder der gleichen zur Datenbank ( MYSQL - Optimierung ) kenn kann sie hier Posten.

    Bye



  • Du kennst es zwar vielleich schon, aber ich find das hier ganz gut



  • Hi!
    Ja kenn ich schon. Danke!
    Ich suche aber ein ein Topic, Tutorial das sich explizit mit diesem Thema auseinandersetzt.

    Wen es interessiert. Ich habe hier etwas über Mysql & Optimierung gefunden:

    http://www.mysql.de/documentation/mysql/bychapter/manual.de_MySQL_Optimisation.html

    Achja. Ich habe mich bei Amazon umgeschaut und habe als einziges das Buch

    Managing and Using MySQL. A Database Optimized for Speed and Interactiviy. von George Reese.
    gefunden. Was haltet ihr davon ?

    Bye



  • ISBN:
    3-8272-5793-X


Anmelden zum Antworten