1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

MYSQL braucht ca 10 Sekunden um die letzten 3000 Eintraege zu laden

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von charly013, 26 Juni 2019.

  1. charly013

    charly013 Neuer Benutzer

    Moinmoin,

    ich bin noch frischling in mysql, ich versuche gerade die letzten 3000 eintraege zu laden aus einer DB
    mit ca 4000000 eintraegen mit:
    "SELECT * FROM $_my_db002 WHERE coin = '$ref_coin' ORDER BY idx DESC LIMIT $breite6"
    wobei idx = autoicrement , $breite6 = 3000
    mysql = 5.5.62 auf debian8 cpu = AMD GX-412HC , 4 Kerne 4Gb Ram

    dafuer brauch der Rechner gut 10 Sekunden, ist das normal oder mach ich was falsch ????
    vG
    Charly
     
  2. Walter

    Walter Administrator Mitarbeiter

    Dazu fallen mir nur zwei Dinge ein:
    • Deine Mysql-Version ist völlig veraltet (2010, in der IT ist das ewig), unsicher und langsam.
    • Wir kennen Deine Tabellenstruktur nicht (man könnte genausogut fragen "Ich habe hier ein Auto, es hat 4 Räder, ist das schnell?") und vor allem nicht, ob bei Deiner Abfrage ein Index benutzt wird oder ein Full scan notwendig ist
     
    Zuletzt bearbeitet: 27 Juni 2019
  3. charly013

    charly013 Neuer Benutzer

    moinmoin Walter, tnx f. die Antwort, hier der aufbau der Tabelle:
    CREATE TABLE `allcoin24h` (
    `idx` bigint(24) unsigned NOT NULL AUTO_INCREMENT,
    `coin` char(15) DEFAULT '',
    `priceChange` decimal(24,10) DEFAULT NULL,
    `priceChangePercent` decimal(24,10) DEFAULT NULL,
    `weightedAvgPrice` decimal(24,10) DEFAULT NULL,
    `prevClosePrice` decimal(24,10) DEFAULT NULL,
    `lastPrice` decimal(24,10) DEFAULT NULL,
    `lastQty` decimal(24,10) DEFAULT NULL,
    `bidPrice` decimal(24,10) DEFAULT NULL,
    `bidQty` decimal(24,10) DEFAULT NULL,
    `askPrice` decimal(24,10) DEFAULT NULL,
    `askQty` decimal(24,10) DEFAULT NULL,
    `openPrice` decimal(24,10) DEFAULT NULL,
    `highPrice` decimal(24,10) DEFAULT NULL,
    `lowPrice` decimal(24,10) DEFAULT NULL,
    `volume` decimal(24,10) DEFAULT NULL,
    `quoteVolume` decimal(24,10) DEFAULT NULL,
    `openTime` decimal(24,10) DEFAULT NULL,
    `closeTime` decimal(24,10) DEFAULT NULL,
    `firstId` decimal(24,10) DEFAULT NULL,
    `lastId` decimal(24,10) DEFAULT NULL,
    `count` decimal(24,10) DEFAULT NULL,
    `leer1` decimal(24,10) DEFAULT NULL,
    `leer2` decimal(24,10) DEFAULT NULL,
    `dt` bigint(20) unsigned DEFAULT NULL,
    `memo` tinyint(4) DEFAULT NULL,
    PRIMARY KEY (`idx`)

    da werden die Daten der letzten 24h gespeichert
    i denk irgendwo hab i da noch einen Dummy-Fehler
    oder haste einen Tip wie ich es besser machen kann,
    system will i danach updaten um jetzt nicht noch damit zu 'kaempfen'
    vlg
    Charly
     
  4. akretschmer

    akretschmer Datenbank-Guru

    schau Dir das EXPLAIN an (auch wenn das bei MySQL absolut grottig ist). Vermutlich würde ein Index helfen, auf dem, was im WHERE ist.
     
  5. charly013

    charly013 Neuer Benutzer

    danke!
    hab mit EXPLAIN mal "getestet", jetzt hab i einen index auf coin und bin auf 0.11 bis 0.7 sekunden runter, warum das so schwank weiss
    i (noch) nicht, aber wesentlich besser ist es als die vorherigen 11-12 sekunden
    vielen dank & vlG
    Charly
     
  6. akretschmer

    akretschmer Datenbank-Guru

    vermutlich Caching-Effekte, in PostgreSQL würde ich raten, EXPLAIN (analyse, buffers) <query> zu verwenden, um das genauer zu sehen.
     
  7. charly013

    charly013 Neuer Benutzer

    hab noch etwas 'nachgedacht', was i nicht bedacht habe das alle 10 Sekunden ueber 1000 datensaetze geschrieben werden, bei der nicht allzu gewaltigen CPU geht die CPU last doch recht oft hoch, dann hab i lt. meiner messung auch manchmal bis 1.5 Sekunden verarbeitungszeit

    vielen dank f. eure Hilfe
    Charly
     
  8. ukulele

    ukulele Datenbank-Guru

    Das beste wäre vermutlich ein clustered index auf coin und idx (für das ORDER BY). Aber das berücksichtigt natürlich nur die Optimierung der Abfragegeschwindigkeit, wenn du aber jede Minute tausende Messwerte schreibst sind Indexe für die Schreibperformance natürlich gruselig. Und schreiben tust du öfter als lesen bei einer klassischen Auswertung.

    Abgesehen davon:
    Hardware grottig
    Version veraltet
    DSMS kann man drüber streiten aber sowas simples kriegt MySQL normalerweise hin

    Versuche deine Auswertungen zu reduzieren, vielleicht das Ergebnis Cachen und in eine indexierte Tabelle auslagern um damit zu arbeiten.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden