Tabel snel ontdubbelen
Dit heeft er mee te maken dat alles door kan draaien als 1 bron uitvalt.
Ik update vanuit de verschillende bronnen met ODBC.
Dan krijgt je dus elke melding meerdere keren in de database.
De meldingen gaan per (ongeveer) 20 per minuut in de database.
In de ODBC heb ik het volgende als Initial Statement het volgende ingevuld om te ontdubbelen:
DELETE t1 FROM tabel1 t1
INNER JOIN tabel2 t2
WHERE
t1.id < t2.id AND
t1.veld1 = t2.veld1 AND
t1.veld2 = t2.veld2;
Dat doet zijn werk prima.
Van alles wat dubbel is bewaart hij de nieuwste (aan de hand van de id).
Maar dit zijn zoveel vergelijkingen elke keer dat hij daar elke keer 7 seconden mee bezig is.
Het is natuurlijk onzin dat hij elke keer weer volledig de hele tabel door gaat terwijl als je de laatste 100 nieuwe records zou pakken het ook goed gaat (de andere, oudere records zijn al een keer ontdubbelt).
Maar hoe voeg je hier een LIMIT of MAX toe?
Daarbij wil ik niet maximaal een bepaald aantal records wissen maar een maximaal aantal records doorzoeken.
Wie weet hoe dit werkt?
En als een record niet bestaat wordt een nieuw record toegevoegd.
https://www.plus2net.com/sql_tutorial/sql_update-on-duplicate-key.php
De applicatie die de records toevoegt, daar heb ik geen invloed op.
Er draaien nu twee van deze applicaties (om meer zekerheid te hebben) en die geven dezelfde data in dezelfde database en tabel. Alleen de id verschil dan dus. Vandaar dat ik extern moet gaan ontdubbelen.
Overigens gaan we er maar van uit dat je de database MySQL gebruikt, omdat dit de meest voorkomende is.
Wanneer je een andere gebruikt (MariaDB, PostgreSQL, mssql, etc.) laat het ons weten.
In jouw werkende voorbeeld controleer je op 't1.veld1 = t2.veld1 AND t1.veld2 = t2.veld2'. Je wilt dat deze aan elkaar gelijk zijn omdat ze maar één keer voor mogen komen in de tabel. Een database kan automatisch voorkomen dat er dubbele gegevens worden ingevoerd met een UNIQUE index:
Vervolgens kan de database er voor zorgen dat, wanneer je deze gegevens probeert dubbel op te slaan, de overige gegevens uit de rij worden bijgewerkt, maar NIET de dubbele:
Als je de INSERT-query echt niet kunt (laten) aanpassen, dan wordt het ingewikkelder.
Je kunt een BEFORE INSERT TRIGGER aanmaken, die de functionaliteit van ON DUPLICATE KEY UPDATE nadoet.
Kijk hier naar: https://www.mysqltutorial.org/mysql-triggers/mysql-before-insert-trigger .
Er staat een voorbeeld onder 'Creating BEFORE INSERT trigger example' dat redelijk eenvoudig is aan te passen.
Gewijzigd op 02/04/2023 21:28:59 door Ad Fundum