Grazie a commenti utili, in particolare da @roganjosh, sembra che il problema sia che il connettore mysql predefinito sia scritto in python anziché in C, il che lo rende molto lento. La soluzione è usare MySQLdb
, che è un connettore C nativo.
Nella mia configurazione particolare, eseguire Python 3 con anaconda, non era possibile perché MySQLdb
è supportato solo in Python 2. Tuttavia, esiste un'implementazione di MySQLdb
per Python 3 sotto il nome mysqlclient
.
Usando questa implementazione il tempo è ora sceso a circa 5 minuti per leggere l'intera tabella, non veloce come R, ma molto meno dei 40 circa che ci voleva prima.
Sono ancora aperto a suggerimenti che lo rendano più veloce, ma suppongo che questo sia il massimo che potrà succedere.