Odpovídám na otázku 1 sám:Zdá se, že problém měl více společného s Postgresql (nebo spíše databázemi obecně). S přihlédnutím k bodům uvedeným v tomto článku:https://use-the- index-luke.com/sql/dml/insert Našel jsem následující:
1) Odstranění všech indexů z cílové tabulky vedlo ke spuštění dotazu za 9 sekund. Opětovné sestavení indexů (v postgresql) trvalo dalších 12 sekund, takže stále výrazně pod ostatními časy.
2) S pouze primárním klíčem na svém místě zkrátilo vkládání řádků seřazených podle sloupců primárního klíče čas asi na třetinu. To dává smysl, protože by mělo být vyžadováno malé nebo žádné zamíchání řádků indexu. Také jsem si ověřil, že to je důvod, proč moje kartézské spojení v postgresql bylo rychlejší (IE řádky byly seřazeny podle indexu, čistě náhodou), umístění stejných řádků do dočasné tabulky (neuspořádané) a vkládání z toho ve skutečnosti to trvalo mnohem déle.
3) Zkoušel jsem podobné experimenty na našich mysql systémech a zjistil jsem stejné zvýšení rychlosti vkládání při odstraňování indexů. S mysql se však zdálo, že přebudování indexů spotřebovalo kdykoli získaný čas.
Doufám, že to pomůže každému, kdo na tuto otázku při vyhledávání narazí.
Stále mě zajímá, zda je možné odstranit krok zápisu do csv v pythonu (Q2 výše), protože věřím, že bych pak mohl napsat něco v pythonu, co by bylo rychlejší než čistý postgresql.
Díky, Giles