/SQL - DELETE FROM produziert Überhang
Lerv
- datenbank
Hallo zusammen,
ich führe mit Perl einen SQL Zugriff durch und möchte einen Wert mit DELETE FROM löschen - das funktioniert auch, aber wenn ich dann mit phpMyAdmin reingehe steht dort immer Überhang:xKB und der vergrößert sich auch stetig mit jedem weiteren DELETE FROM...
Hier mal der Codeschnipp:
$sthX = $dbh->prepare(qq~
DELETE FROM usermails
WHERE MailID = '$nummerA' AND MailTo = '$nummerB'~
) or Dateierror();
$sthX->execute or Dateierror();
Woran könnte es liegen?
Gruß
Lerv
Tag Lerv.
ich führe mit Perl einen SQL Zugriff durch und möchte einen Wert mit DELETE FROM löschen - das funktioniert auch, aber wenn ich dann mit phpMyAdmin reingehe steht dort immer Überhang:xKB und der vergrößert sich auch stetig mit jedem weiteren DELETE FROM...
Das hat mit Perl nichts zu tun, die Meldung bedeutet einfach gesagt, dass die Datei der Tabelle größer ist als es die eigentlichen Daten darin erfordern. Einfach mal "Tabelle optimieren" (Register "Operationen", dort unter Hilfsmittel), damit sollte alles erledigt sein.
Siechfred
Hallo,
das mach ich auch des öfteren, allerdings kann es ja nicht angehen, dass ich nach einer Del-Operation noch zusätlich eine Optimierung durchführen muss?! - Im Grunde sollte doch die Spalte gelöscht sein und "gut is" - oder muss ich irgendwelche Zeiger zurücksetzen/ändern...?
Ich arbeite wie gesagt mit Perl und will mich nicht immer einloggen um zu optimieren-wenn nötig, andererseits halte ich eine dauerhafte Optimierung (nach jeder Del-Operation) für übertrieben, oder?
Gruß
Lerv
Hello,
das mach ich auch des öfteren, allerdings kann es ja nicht angehen, dass ich nach einer Del-Operation noch zusätlich eine Optimierung durchführen muss?! - Im Grunde sollte doch die Spalte gelöscht sein und "gut is" - oder muss ich irgendwelche Zeiger zurücksetzen/ändern...?
Nein.
Überlass das mal für den Normalfall der Datenbank.
Solange Du auch Sätze einfügst, wird dieser Platz sowieso gleich wieder belegt. Es ist übrigens in Bezug auf die Geschwindigkeit der Datenbank besser, wenn die Datenbank oder bei MySQL eben die einzelnen Tabellen eigene Extents (Überhänge) besitzen. Das DBMS muss dann nämlich nicht immer erst DISK-Space beschaffen, sondern kann gleich schreiben. Je nach OS sind das nämlich verschiedene Schuhe.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hallo Tom,
ich hab gerade etwas versucht um deine Aussage zu bekräftigen und es hat sich bewahrheitet (nicht das ich es nicht gelaubt hätte, doch überzeugt man sich eben selbst gerne davon) - das Entfernen produzierte Überhang, welcher wieder verschwand nachdem neue Datensätze eingefügt wurden.
Also - der Überhang ist im Grunde nur dann relevant wenn ich mehr löschen als einfügen würde...(richtig?!)
Danke euch beiden, habt mir eine Menge Bug-Suche abgenommen (dachte wirklich ich führe einen fehlerhaften DEL durch)
Gruß
Lerv
Hello,
Also - der Überhang ist im Grunde nur dann relevant wenn ich mehr löschen als einfügen würde...(richtig?!)
Der Überhang ist nur dann relevant, wenn Du mal temporär sehr viele Datensätze eigefügt hattest, die die Tabelle entsprechend groß aufgeblasen hatten, Du diese nun alle wieder löschst, und eine derartige Vergrößerung (voraussichtlich) nicht wieder vorgesehen ist. Dann wäre der Platz auf der Platte vergeudet, da er ja der Tabelle gehört. In normalen Anwendungen würde ich mir darüber nicht den Kopf zerbrechen. Außerdem kann man ja von Zeit zu Zeit (vielleicht einmal im Monat) die Optimierung durchführen lassen in einer Zeit, wo das System nicht belastet ist.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Tag Lerv.
Nur der Vollständigkeit halber: Du kannst mit Hilfe von OPTIMIZE TABLE den Optimierungsvorgang auch per Hand anstoßen, indem du einfach ein entsprechendes SQL-Statement auf die DB loslässt.
Siechfred