来自 MySQL 的 read_sql() 非常慢

时间:2021-02-27 12:34:07

标签: python mysql python-3.x pandas sqlalchemy

我正在将 MySQL 与 pandas 和 sqlalchemy 一起使用。但是,它非常缓慢。一个简单的查询需要超过 11 分钟才能在具有 1100 万行的表上完成。哪些操作可以提高这种性能?上面提到的表没有主键,只有一列索引。

from sqlalchemy import create_engine
import pandas as pd
sql_engine_access = 'mysql+pymysql://root:[password]@localhost')
sql_engine = create_engine(sql_engine_access, echo=False)
script = 'select * from my_database.my_table'
df = pd.read_sql(script, con=self.sql_engine)

1 个答案:

答案 0 :(得分:1)

虽然可能不是性能缓慢的全部原因,但一个促成因素是 PyMySQL (mysql+pymysql://) 在重负载下可能比 mysqlclient (mysql+mysqldb://) 慢得多。在一个非常非正式的测试中(没有多次运行,没有平均,没有服务器重新启动),我看到了对本地 MySQL 数据库使用 df.read_sql_query() 的以下结果:

<头>
检索到的行 mysql+mysqldb(秒) mysql+pymysql(秒)
1_000_000 13.6 54.0
2_000_000 25.9 114.1
3_000_000 38.9 171.5
4_000_000 62.8 217.0
5_000_000 78.3 277.4

chart.png