2
我有一个表在MySQL包含以下几列:优化的Python的MySQL /连接速度
id int(11)
contract_id int(11)
datetime datetime
open decimal(18, 10)
high decimal(18, 10)
low decimal(18, 10)
close decimal(18, 10)
表是相当大(> 300百万行),但查询数据库内进行的半年内执行即使他们返回30万行时也是如此。然而,当我从Python中获取数据是很慢的(相同的请求,从0.5秒变为在MySQL Workbench中,以34秒在Python):
import pandas as pd
import mysql.connector
con = mysql.connector.connect(**CONFIG)
cur = con.cursor()
def get_data1():
df = pd.read_sql(
"""
SELECT datetime, open, high, low, close
FROM prices
WHERE contract_id = 1
AND datetime >= '2015-01-01 09:00:00'
AND datetime <= '2015-10-15 16:00:00';
""", con)
return df
我发现,出口从MySQL数据到一个平面文件,然后阅读它在Python中比数据库上的直接查询快23倍:
def get_data2():
cur.execute(
"""
SELECT datetime, open, high, low, close
FROM prices
WHERE contract_id = 1
AND datetime >= '2015-01-01 09:00:00'
AND datetime <= '2015-10-15 16:00:00'
INTO OUTFILE 'C:/Data/Temp.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY "\n";
""")
return pd.read_csv('C:/Data/Temp.csv')
它怎么会是?我怀疑这与数据类型转换有关。任何想法如何使功能get_data1
更快,而无需首先导出到CSV?谢谢。
刚刚看到这个:http://stackoverflow.com/questions/8895837/faster-python-mysql,并想知道是否有帮助? 另外,我看到你正在使用mysql连接器并调用'pd.read_sql' ...你有没有尝试过使用新功能sqlalchemy http://pandas.pydata.org/pandas-docs/stable/generated/pandas .read_sql_query.html – measureallthethings
此外,我不得不尝试替代sqlalchemy,这里是我使用mysql连接器的一个例子:https://gist.github.com/msure/24ce45067d598fa7a5b6 – measureallthethings
谢谢,我会尝试,虽然我不认为它会显着提高性能 - 我相信这个问题出现在数据类型转换中。 – agiap