Kalle_B: MySQL: Bytes einer Tabelle, nur ausgewählte Sätze

Hallöle,

kann ich die Bytesanzahl von ausgewählten Datensätzen einer Tabelle ermitteln, vergleichbar mit dem count(*) für die Anzahl der Sätze?

SELECT count(*)
FROM   adressen
WHERE  owner_id=5

Es wäre schön, diesen Kontrollwert zu haben, denn ich muss Tabellen in zwei Datenbanken vergleichen. Es interessieren aber nur die Sätze eines Mandanten, nicht alle Sätze. Bei Differenzen ist eine Datensicherung für diesen Mandanten fällig.

Data_length aus SHOW TABLE STATUS kann ich leider nicht gebrauchen.

Oder gibt es etwas anderes? Kontrollsumme?

MfG Kalle

  1. Hello,

    Oder gibt es etwas anderes? Kontrollsumme?

    Ich habe eben selber mal gesucht in meinen Link- und Tipplisten.
    Ich vermute, dass Du Dir dafür eine User-defined Function basteln musst.

    Abfragen aller Spaltennamen
    strlen von concat aller Spalten...

    Oder eben md5sum von concat aller spalten

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      Abfragen aller Spaltennamen
      strlen von concat aller Spalten...

      Oder eben md5sum von concat aller spalten

      Ich habe in jeder Tabelle die Spalte last_modified (YYY-MM-DD HH:MI:SS), auf die man sich vielleicht konzentrieren kann. Die größte Tabelle hat für owner_id=5 13.000 Datensätze. Also Stringlänge 13.000 * 18 = 234.000. Und in der zweiten Datenbank nochmal.

      Dann beide vergleichen (oder die md5- Summe?). Ich probier es mal mit PHP, vermute eine deutlich erhöhte Laufzeit.

      Kalle

      1. Hello,

        Dann beide vergleichen (oder die md5- Summe?). Ich probier es mal mit PHP, vermute eine deutlich erhöhte Laufzeit.

        PHP hat eine Funktion für die Ermittlung der Ergebnislängen des letzten fetch.
        http://de3.php.net/manual/en/function.mysql-fetch-lengths.php

        Da müsste dann noch ein array_sum() Anwendung finden.
        http://de3.php.net/manual/en/function.array-sum.php

        Aber, wie Du schon selber schreibst, das halte ich für äußerst ineffektiv.
        Schau Dir doch lieber mal an, wie Du das mit einer userdefinded function in MySQL lösen könntest.
        Mit den mysqli_*Funktionen kannst Du die deklarieren.

        - Spaltenliste holen und statisch merken für die Dauer der Connection in User-Variablen
            es reicht ver,jtlich die kommaseparierte Liste der Feldnamen als String
          - Datensatz selektieren
          - Spaltenliste an concat übergeben und StrLen bestimmen lassen.
          - Ergebnis zurückgeben ans Resultset

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
    2. Hi,

      Abfragen aller Spaltennamen
      strlen von concat aller Spalten...

      Dann wuerde ich doch lieber die einzelnen Laengen addieren - als einen Monster-String mit ggf. BLOB-Inhalten o.ae. drin zu produzieren, der auch erst mal im Speicher platznehmen will.

      MfG ChrisB

      --
      "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
      1. Hello,

        Abfragen aller Spaltennamen
        strlen von concat aller Spalten...

        Dann wuerde ich doch lieber die einzelnen Laengen addieren - als einen Monster-String mit ggf. BLOB-Inhalten o.ae. drin zu produzieren, der auch erst mal im Speicher platznehmen will.

        Da hast Du bestimmt Recht, wenn es nur um die Länge geht.
        Mir ging es eigentlich auch um MD5SUM, dazu benötigt man doch den String.
        Warum ich dann strlen geschreiben habe, weiß ich auch nicht *tztz*

        Es sollte aber möglichst in der DB stattfinden, damit die Schnittstelle nicht auch noch mit den Daten behelligt wird.

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de