【发布时间】:2017-06-28 11:34:33
【问题描述】:
问题是当使用 pyodbc 查询我的数据库时,可能需要大约一分钟才能返回我的数据。我数据库中的这个表在大约一百万行左右徘徊。我怎样才能加快速度?我已经尝试为表中的主要列设置值,但它仍然很慢。我也试过限制返回的数据无济于事。还有其他更快的东西吗?或者我可以改变一些东西以使以下速度更快吗?任何帮助将不胜感激!
这是我的代码:
import pyodbc
conn = pyodbc.connect(r'DSN=mydb;UID=myuserid;PWD=mypass')
class Visual(object):
def get_resource_ids(self, *xargs):
resource_ids = []
cur = conn.cursor()
cur.execute("select * from operation where status = 'C' and workorder_type = 'W' and workorder_base_id = ? and workorder_lot_id = ? and workorder_split_id = ? and workorder_sub_id = ? and rownum <= 10", xargs[0], xargs[1], xargs[2], xargs[3])
try:
return [dict(count=str(index), resource_id=row[6]) for index, row in enumerate(cur, 1)]
except ValueError:
print "Error"
finally:
cur.close()
conn.close()
【问题讨论】:
-
当您说“我也尝试过限制返回的数据”时,您的意思是您尝试仅检索感兴趣的列而不是
select *? -
这是我正在做的限制返回的数据“rownum
-
如果使用
rownum <= 10的查询与没有该约束的查询一样长,那么“rownum”列显然没有被索引。 “操作”是表还是视图? “rownum”是实际列还是派生列?基础表是否对 WHERE 子句中包含的所有列都有索引? -
是的,where 子句中的每一列都有一个索引@GordThompson
-
您使用的是什么数据库? IIRC 在我的 Oracle 时代,
rownum是一个不会阻止全表扫描的关键字。您是否对查询进行了EXPLAIN?我的猜测是它在你的表格设计中,而不是pyodbc。
标签: python python-2.7 pyodbc