# Datensätze löschen



## JanHH (30. Dez 2011)

Hallo,

hab gerüchteweise gehört, dass das Löschen von Datensätzen (Zeilen) aus Tabellen, bei denen der Zugriff performancekritisch ist (daher Indizes angelegt usw), nicht besonders performant ist und auch die Indizierung durcheinander bringt (reindizierung notwendig) und man die Daten daher nicht löschen, sondern die Zeilen lieber über ein entsprechendes Attribut als "invalid" markieren sollte.

Stimmt das oder kann ich die auch getrost einfach löschen?

Handelt sich dabei um eine JPA 1.0-Anwendung.

Danke


----------



## maki (30. Dez 2011)

Ich hab gehört dass Leute zuviel auf hörensagen geben 

Testen & messen, der Rest ist geschwafel...


----------



## JanHH (30. Dez 2011)

Hab ich mir auch gedacht, ist ja keine grosse Aktion, das später umzubauen.

Gibt dann wohl also kein eindeutiges ja oder nein?

Ich kenn dummerweise nur eine einzige Person, die sich wirklich im JEE-Bereich auskennt, und bin daher zwangsläufig mit etwas einseitigen Meinungen konfrontiert (hinter denen allerdings reichlich Praxiserfahrung steckt). Und ich bin ja grad erst dabei, selber Komplexe Projekte damit in Angriff zu nehmen und Erfahrungen zu sammeln.


----------



## maki (30. Dez 2011)

Ist alles auch eine Frage des Datenvolumens, der DB und der DB Struktur, pauschal kann man nur sagen dass es keine pauschale Antwort gibt.

Solche Optimierungen kann man immer noch dann umsetzen wenn sie nötig sind, aber für den Anfang reicht es meistens die Probleme zu lösen die man wirklich hat


----------



## JanHH (30. Dez 2011)

klingt plausibel. Naja dann mal danke+guten Rutsch


----------



## javapower (1. Jan 2012)

JanHH hat gesagt.:


> Und ich bin ja grad erst dabei, selber Komplexe Projekte damit in Angriff zu nehmen und Erfahrungen zu sammeln.



nach einem delete setzen wir meistens ein reorg und runstat ab. der ansatz über ein attribut "invalid" ist auch machbar. wie bereits erwähnt hängt die db performance von faktoren ab, die hier nicht erwähnt worden sind. deshalb ist testen, messen und löschstrategie festlegen zu empfehlen. btw: welche db verwendest du und um wieviele datensätze handelt es sich?


----------



## JanHH (2. Jan 2012)

Postgres 8.4 (aber da ist auch alles andere möglich was kein Geld kostet und JDBC kann), und wie viele Datensätze.. gute Frage. Schwankt stark zwischen viel und wenig. Werden immer mehr (wenn man sie nicht löscht irgendwann). Gibt eine Tabelle mit Datensätze und "Projekte" und jedes Projekt legt in der Tabelle Datensätze ab, pro Projekt werden es wohl einige hundert bis tausend, und es laufen zwischen 10 und 200 dieser Projekte pro Jahr. Entweder man löscht die Datensätze gleich wenn sie benutzt worden sind und nicht mehr gebraucht werden, oder man setzt sie auf "invalid" und löscht sie dann wenn ein ganzes Projekt gelöscht wird (was wohl mit anschliessender Neu-Indizierung einiger Tabellen über Nacht stattfinden wird).


----------

