Quando si fanno caricamenti massivi sul database, ed è necessario implementare sincronizzazioni incrementali, può essere estremamente vantaggioso utilizzare uno statement (esistente sia in SQL Server che in ORACLE che in PostgreSQL) chiamato MERGE.
L'istruzione MERGE (nata in origine proprio per gestire caricamenti incrementali su database Oracle e solo in seguito implementata anche in SQL Server) ha un livello di prestazioni spaventoso rispetto all'implementazione classica che è possibile fare oggi con INDE (ovvero aprire un cursore, verificare l'esistenza della chiave nella destinazione e in base a questa inserire o modificare il record).
Siccome su INDE Foundation non vengono fatte nuove implementazioni a livello di db ormai da molti anni, non sarebbe male aggiungere alle attuali funzioni di base (insert, update e delete) quella di MERGE.
Inoltre sarebbe uno statement "traducibile" anche per database che non supportano tale funzionalità.
Oggi a noi è capitato, per il tipo di attività che facciamo, di dover usare lo statement di MERGE e abbiamo dovuto gestire la cosa extra INDE.
Un vero peccato.
Riferimenti utili:
- MSSQL: https://technet.microsoft.com/it-it/library/bb522522(v=sql.105).aspx
- Oracle: https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm
- PostgreSQL: https://wiki.postgresql.org/wiki/UPSERT
- MySQL: http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html