我正在将 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)
答案 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 |