Jeg besvarer selv spørgsmål 1:Det ser ud til, at problemet havde mere at gøre med Postgresql (eller rettere databaser generelt). Under hensyntagen til punkter i denne artikel:https://use-the- index-luke.com/sql/dml/insert Jeg fandt følgende:
1) Fjernelse af alle indekser fra destinationstabellen resulterede i, at forespørgslen kørte på 9 sekunder. Genopbygning af indekserne (i postgresql) tog yderligere 12 sekunder, så stadig langt under de andre gange.
2) Med kun en primær nøgle på plads, reducerede indsættelse af rækker sorteret efter primærnøglekolonnerne den tid, det tog til omkring en tredjedel. Dette giver mening, da der kun skal være ringe eller ingen blanding af indeksrækkerne påkrævet. Jeg bekræftede også, at dette er grunden til, at min kartesiske joinforbindelse i postgresql var hurtigere i første omgang (dvs. rækkerne blev ordnet efter indekset, rent tilfældigt), placerede de samme rækker i en midlertidig tabel (uordnet) og indsatte fra det tog faktisk længere tid.
3) Jeg prøvede lignende eksperimenter på vores mysql-systemer og fandt den samme stigning i indsættelseshastighed, når jeg fjernede indekser. Med mysql så det dog ud til, at genopbygningen af indekserne blev brugt op til enhver tid.
Jeg håber, at dette hjælper alle andre, der støder på dette spørgsmål fra en søgning.
Jeg spekulerer stadig på, om det er muligt at fjerne skrive til csv-trinnet i python (Q2 ovenfor), da jeg tror, at jeg så kunne skrive noget i python, der ville være hurtigere end ren postgresql.
Tak, Giles