python - 获取结果时 pyodbc 到 SQL Server 的速度太慢
问题描述
我正在使用带有 Python 3 的 jupiter notebook 并连接到 SQL Server 数据库。我正在使用 pyodbc 4.0.22 版连接到数据库。
我的目标是将 SQL 结果存储在 pandas 数据框中,但查询速度很慢。
这是代码:
import pyodbc
cnxn = pyodbc.connect("DSN=ISTPRD02;"
"Trusted_Connection=yes;")
ontem = '20180521'
query = "SELECT LOJA, COUNT(DISTINCT RA) FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
ra_ontem = pd.read_sql_query(query, cnxn)
end = time.time()
print("Tempo: ", end - start)
节奏:26.379971981048584
由于耗时较长,所以我对数据库服务器进行了监控,在服务器上运行查询大约需要 3 秒,如下图所示:
query = "SELECT LOJA, COUNT(DISTINCT RA) FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
crsr = cnxn.cursor()
crsr.execute(query)
end = time.time()
print("Tempo: ", end - start)
速度:3.7947773933410645
start = time.time()
crsr.fetchone()
end = time.time()
print("Tempo: ", end - start)
速度:0.2396855354309082
start = time.time()
crsr.fetchall()
end = time.time()
print("Tempo: ", end - start)
节奏:23.67447066307068
因此,当数据已经从数据库服务器检索到并且看起来 pyhton 代码在处理数据时很慢时,我的问题似乎是本地的。
但我只有892行!
ra_ontem.shape
(189, 2)
所以我的问题是我怎样才能让它更快并将结果加载到 Pandas Dataframe 中?
谢谢
解决方案
我有同样的问题,只是因为跟踪已打开。只需打开 ODBC 数据源管理器并转到跟踪选项卡并关闭跟踪。它完全解决了问题。
推荐阅读
- c - 如何从字符数组中获取特定元素并将整个值存储为整数?
- python - ImportError:无法导入名称“UserAgentMixin”并且安装了 werkzeug
- javascript - 在添加到购物车按钮上打开购物车抽屉单击 shopify
- tensorflow - 为什么量化后TF-lite的精度不正确
- unity3d - Unity+Photon:平滑跟随遥控刚体
- javascript - SQLite:计数函数返回[对象数据库](JS)
- c# - 在 C# 中的 Windows 服务中发出哔声
- amazon-web-services - AWS RDS - 我是否应该在现有集群中创建一个新集群 va 新数据库
- css - 重新调整图像网格的大小时,如何阻止这些间隙出现?
- xml - 使用 xslt1.0 根据输入动态构建 xml