MySQL: Bytes einer Tabelle, nur ausgewählte Sätze
Kalle_B
- datenbank
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
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
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
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
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
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