dubletten verhindern uniq-index

hallo,

ich habe eine tabelle, in der dubletten in der spalte ID das anlegen eines uniqe-indexes verhindern.

meine quick and dirty-lösung war:

delete from table where id in(select id as x from table where (select count(*) from table where id=x)>1);

geht das ggf. schneller oder einfacher? gibts da ein patentrezept?

ts

Ich wüsste einen schnelleren Weg:

TRUNCATE table

Weil wenn du Daten einfach so löschen kannst, um die Bedingungen eines Primary Key zu erfüllen, kannst du auch alle Daten löschen. So wichtig können die Daten also nicht sein.

Lutz Donnerhacke: de.comp.datenbanken.misc FAQ

Andreas

Nachtrag: Lutz nutzt OID, falls keine da sind: ctid.

Andreas

danke!

so wichtig sind die einzeldatensätze wirklich nicht - es geht hier nicht um gelddaten, sondern wenn du so willst um eine näherung - der datenbestand wird nie komplett sein, und wenn bei >100.000.000 einträgen der eine oder andere rausfällt, wird er irgendwann auch von alleine wieder reinlaufen.

ich verzichte aus performancegründen in den meisten tables auf referenzielle integrität - dafür laufen eine reihe von “aufräumjobs”, die da ein wenig hinterherräumen.

bisher bin ich ganz gut damit gefahren.
ein problem wie die beim dump reingelaufenen dubletten ist aber wohl die quittung für diesen fehlertoleranten ansatz.
ich hätte andererseits auch selber dran denken können, die insert-queues vor dem dump für ein paar stunden abzustellen, dann wärs vermutlich nicht dazu gekommen.

die indizes sind wieder da, business as usual. wie immer ist die datenbank nach dump und reimport um rund 25% kleiner und um einiges schneller geworden.

tom

Irgendetwas machst du falsch …

die Datenbank sollte nicht langsamer werden, nur weil mehr Daten dazukommen.