Zähler aktualisieren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zähler aktualisieren

    Hallo zusammen,

    Ich habe folgendes Problem.
    Ich habe eine Tabelle in einer Datenbank mit 180.000 einträgen die jeden Tage mit mit neuen Daten aktualisiert wird. Das sind ca. 16.000 Datensätze(Insert, Update, Delete). Soweit so gut. Jetzt gibt es in der Datenbank eine Spalte "X" die ca. 5000 Einträge hat. Ich möchte jetzt wenn ein Datensatz angezeigt wird je nachdem welchen Wert "X" hat 36 andere Datensätze angezeigt werden. Also wenn X=1 ist sollen die Datensätze 1 bis 36 angezeigt werden, wenn X=2 ist => Datensätze 37 bis 72 usw.
    Im Moment organisiere ich das mit einer Spalte Zähler, die die Datensätze durchnummeriert. Leider dauert das Update dier Spalte (da diese ja nach dem täglichen Einspielen der 16.000 Datensätze nicht mehr paßt) ca. 30 Minunten, 180.000 mal Update.....
    Mit select ..... where..... LIMIT(...,36) habe ich es auch schon ausprobiert, da geht die Datenbank aber in die Knie weil zu Spitzenzeiten ca. 300 User anwesend sind.

    Weiß jemand eine bessere Lösung???
    Und ich hoffe ich habe mich verständlich ausgedrückt, sonst fragt nochmal nach.

    Ach ja danke schon einmal.

    Ingo

  • #2
    zeig mal bitte die struktur deiner tabelle(n).
    Die Zeit hat ihre Kinder längst gefressen

    Comment


    • #3
      Hast du schon deine Indexe usw. untersucht?

      Hier ein paar Infos zur Optimierung: http://dev.mysql.com/doc/mysql/de/my...imisation.html

      (Da du nix gesagt hattest, gehe ich von MySQL aus...)

      Comment


      • #4
        Tabellenstrucktur

        PHP Code:
        #
        # Tabellenstruktur für Tabelle `ste`
        #
        Hier ist die Tabellenstrucktur

        CREATE TABLE 
        `ste` (
          `
        idmediumint(9unsigned NOT NULL auto_increment,
          `
        BKZmediumint(7unsigned NOT NULL default '0',
          `
        Bevarchar(60NOT NULL default '0',
          `
        Anzahlchar(3) default NULL,
          `
        ortvarchar(24) default NULL,
          `
        Chiffrevarchar(18) default NULL,
          `
        Rueckvarchar(30) default NULL,
          `
        Qualichar(2) default NULL,
          `
        PLZvarchar(5) default NULL,
          `
        zaehlerint(6NOT NULL default '0',
          
        PRIMARY KEY  (`id`),
          
        KEY `BKZ` (`BKZ`),
          
        KEY `PLZ` (`PLZ`),
          
        KEY `Chiffre` (`Chiffre`),
          
        KEY `Be` (`Be`),
          
        KEY `ort` (`ort`),
          
        KEY `zaeher` (`zaehler`)
        TYPE=MyISAM AUTO_INCREMENT=227423 

        Comment


        • #5
          ORDER BY x LIMIT x-1, 36 ist das, was so langsam ist?
          Ich denke, also bin ich. - Einige sind trotzdem...

          Comment


          • #6
            Ja, das Limit ist sehr langsam, da dauert dann eine Abfrage bis zu 20 sec. wenn z. B. Limit(100000,36) ist.

            gelöst habe ich die abfrage so:
            PHP Code:
            select `BKZ`,`PLZ`,`Befrom `stewhere zaehler $zahl AND zaehler $zahl_1 
            wobei $zahl abhängig davon ist welchen Wert BKZ hat.

            Da ist aber das Updaten der spalte zahler nach dem täglichen einspielen der neuen Daten sehr zeitaufwändig ca. 30 min.


            Ich hätte gerne diese abfrage ohne die spalte zaehler immer wieder upzudaten. Mit der spalte "id" welche ein auto_increment hat geht es nicht, da dort ja durchs löschen und einfügen keine Durchnummerierung vorhanden ist. vielleicht gibt es ja so was, das man eine bestimmte Zeile in der DB ansprechen kann ohne auf eine spalte zu verweisen. so etwas wie :

            select .... where DB-Zeile > 1 AND DB-zeile <23 ...... usw.

            Ingo

            Comment

            Working...
            X