Graças a comentários úteis, particularmente de @roganjosh, parece que o problema é que o conector mysql padrão é escrito em python em vez de C, o que o torna muito lento. A solução é usar
MySQLdb
, que é um conector C nativo. Na minha configuração específica, executando python 3 com anaconda, isso não foi possível porque
MySQLdb
é suportado apenas em python 2. No entanto, existe uma implementação de MySQLdb
para python 3 sob o nome mysqlclient
. Usando essa implementação, o tempo agora é de cerca de 5 minutos para ler a tabela inteira, não tão rápido quanto R, mas muito menos do que os 40 ou mais que levava antes.
Ainda estou aberto a sugestões que o tornariam mais rápido, mas meu palpite é que isso é tão bom quanto possível.