我试图读取大型access数据库中的行数,并试图找到最有效的方法。这是我的密码:
driver = 'access driver as string'
DatabaseLink = 'access database link as string'
Name = 'access table name as string'
conn = pyodbc.connect(r'Driver={' + driver + '};DBQ=' + DatabaseLink +';')
cursor = conn.cursor()
AccessSize = cursor.execute('SELECT count(1) FROM '+ Name).fetchone()[0]
connection.close()
这是可行的,AccessSize
确实给了我一个包含数据库中行数的整数,但是计算起来太长了(我的数据库有200多万行和15列)
我试图通过pd.read_sql
读取数据,并使用chunksize
功能循环并不断计算每个块的长度,但这也需要很长时间。我还在游标执行部分中尝试了.fetchall
,但是速度与.fetchone
类似
我本以为会有一种更快的方法来快速计算表的长度,因为我不需要读取整个表。我的想法是找到最后一行的索引值,因为这本质上是行数,但我不确定如何做到这一点
谢谢
200万不应该花那么长时间。我使用过pd.read_sql(con,sql)如下:
你在做什么不同的事吗
在我的例子中,我使用的是一个db2数据库,也许这就是速度更快的原因
从对问题的评论:
那么您就不能期望数据库有好的性能,因为每一次选择都是一次表扫描
我在网络共享上有一个Access数据库。它包含一个100万行的表,并且绝对没有索引。Access数据库文件本身是42 MiB。当我这样做的时候
它耗时75秒,生成45个MiB的网络流量。只需向表中添加一个主键,文件大小就会增加到48 MiB,但同样的代码需要10秒,并生成7 MiB的网络流量
TL;DR:将主键添加到表中,否则将继续受到性能不佳的影响
相关问题 更多 >
编程相关推荐