Noscripter: MYSQL - Spalte nachträglich unique (bei 70 Mio. Einträgen)

Hallo,

ich habe ein Problem.ich habe eine "riesen" Mysql Tabelle mit 70 Mio. Einträgen. Der Wunsch ist nun wenn eine definierte Spalte eine Doppelung enthält also zb. zwei Spalten mit "aaaaaa" wird eine gelöscht.

Mein erster Ansatz war einfach eine neue Tabelle mit dem Feld unique und mit einem PHP Script (Select + insert) die Daten herüberpulvern. Das ganze Wochenende hat die Kiste gerödelt, und nur einen Bruchteil der Datenbank geschaft. Also nicht die perfekte Lösung.

Manuelle Nacharbeit via PHPMyadmin (sortieren nach ASC) und löschen klicken ist bei so vielen Datensätzen unmenschlich.

Habt Ihr vielleicht noch andere Ideen?

  1. Tach!

    Mein erster Ansatz war einfach eine neue Tabelle mit dem Feld unique und mit einem PHP Script (Select + insert) die Daten herüberpulvern. Das ganze Wochenende hat die Kiste gerödelt, und nur einen Bruchteil der Datenbank geschaft. Also nicht die perfekte Lösung.

    Die Daten nicht zu PHP und wieder zurück zu schaufeln, spart den damit verbundenen Aufwand. Es gibt INSERT ... SELECT ..., dazu ein IGNORE, um die Dopplungen auszuschließen.

    dedlfix.

    1. Danke für den TIP.

      Du meinst über die MYSQL Konsole? Da habe ich leider keinen Zugriff, nur PHP kann ich auf der Konsole ausführen lassen👎.

      1. Tach!

        Du meinst über die MYSQL Konsole? Da habe ich leider keinen Zugriff, nur PHP kann ich auf der Konsole ausführen lassen👎.

        Du kannst das INSERT-SELECT-Statement auch via PHP starten.

        dedlfix.

      2. Hallo Noscripter,

        den INSERT...SELECT müsstest Du auch über PHPMyadmin absetzen können. Er operiert dann aber komplett auf dem Server und schiebt die Daten nicht zwischen PHP und MYSQL hin und her.

        Wenn's MS SQL SERVER wäre, würde ich dann allerdings befürchten, dass mit das SQL Log explodiert. Ob das bei MYSQL auch passieren kann, weiß ich nicht. Wenn es passiert, musst Du den SELECT so formulieren dass immer nur ein gewisser Ausschnitt der DB verarbeitet wird und dann Brocken für Brocken verarbeiten.

        Rolf

        --
        sumpsi - posui - clusi
  2. Hallo Noscripter,

    ich habe ein Problem.ich habe eine "riesen" Mysql Tabelle mit 70 Mio. Einträgen. Der Wunsch ist nun wenn eine definierte Spalte eine Doppelung enthält also zb. zwei Spalten mit "aaaaaa"

    auch wenn ich zu deinem Problem nichts beitragen kann, würde mich mal folgendes interesieren

    • Wie groß kann eine MySQL Datenbank werden bevor diese anfängt zu schwächeln?
    • Können 70 Mio Datensätze überhaupt noch exportiert und anschließend wieder eingespielt werden
    • Wie lange braucht eine Suche wenn du nach einem Datensatz suchst?

    Bis bald!
    Meowsalot (Bernd)

    1. Tach!

      • Wie groß kann eine MySQL Datenbank werden bevor diese anfängt zu schwächeln?
      • Wie lange braucht eine Suche wenn du nach einem Datensatz suchst?

      Diese Fragen lassen sich vielleicht für einen konkreten Fall beantworten, aber sie sind nicht generell übertragbar. Insofern ist eine Antwort reichlich nutzlos. Sie fängt mit den Worten an: Kommt darauf an. Nämlich auf Hardware, Zugriffszahlen, Art der Abfragen und mögliche Optimierungen, zum Beispiel Index.

      • Können 70 Mio Datensätze überhaupt noch exportiert und anschließend wieder eingespielt werden

      Die kann man ganz klar mit Ja beantworten. Es war möglich, sie zu füllen, es ist möglich, sie komplett auszulesen, also kann man da auch exportieren und importieren.

      dedlfix.

      1. Dem stimme ich zu, es ist auch möglich nachträglich einen Index zu setzten. Dauerhalt nur etwas. Das einzige was ich empfehlen kann ist eine SSD und reichlich RAM.