s**u 发帖数: 105 | 1 要做如下的一个任务在本地一个大约700兆的access数据库里:
A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。
需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判
断最后更新A表中的三个字段。
现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD
写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完!
如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥
?Python会快么?本人斧头帮出身,望班上高手不吝赐教。 |
F***Q 发帖数: 6599 | 2 convert your db to sqlite, and write an efficient sql script.
you bottleneck is likely your algorithm and db engine, not the hardware. if
you don't address the problem at its origin, you will hit another bottleneck
even you upgrade to the latest hardware. |
A*j 发帖数: 12 | 3 用Access自带的SQL语句去做查询和更新表的操作
不要用VBA,那样相当于又多了一层壳去操作数据
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
d******a 发帖数: 32122 | 4 关键字段设index了吗?
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
t*****z 发帖数: 1598 | 5 感觉可以用一个稍微复杂的SQL命令就搞定的,性能会大大提高。
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
s**u 发帖数: 105 | 6 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。
更新一下结果:
SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行
时间是。。。惊人的!
居然3分钟不到!!!!3分钟不到!!!3分钟不到!!!
3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。
我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了?
4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意
思是把B表按Field_B排序么?
还请各位不吝赐教! |
F***Q 发帖数: 6599 | 7
了?
https://www.progress.com/tutorials/odbc/using-indexes
again, if you convert your database to sqlite, I am sure you can cut the run
-time even more. 3 min still sounds high for your db size.
free converters are available at
https://www.sqlite.org/cvstrac/wiki?p=ConverterTools
just search "MDB"
【在 s**u 的大作中提到】 : 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。 : 更新一下结果: : SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行 : 时间是。。。惊人的! : 居然3分钟不到!!!!3分钟不到!!!3分钟不到!!! : 3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。 : 我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了? : 4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意 : 思是把B表按Field_B排序么? : 还请各位不吝赐教!
|
t*********u 发帖数: 26311 | 8 你不会是对数据库用vba的loop吧?
了?
----
☆ 买买提 For Windows 10 -- ☆ 大本出品 ☆
【在 s**u 的大作中提到】 : 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。 : 更新一下结果: : SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行 : 时间是。。。惊人的! : 居然3分钟不到!!!!3分钟不到!!!3分钟不到!!! : 3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。 : 我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了? : 4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意 : 思是把B表按Field_B排序么? : 还请各位不吝赐教!
|
s**u 发帖数: 105 | 9 正是!
【在 t*********u 的大作中提到】 : 你不会是对数据库用vba的loop吧? : : 了? : ---- : ☆ 买买提 For Windows 10 -- ☆ 大本出品 ☆
|
s**u 发帖数: 105 | 10 要做如下的一个任务在本地一个大约700兆的access数据库里:
A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。
需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判
断最后更新A表中的三个字段。
现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD
写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完!
如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥
?Python会快么?本人斧头帮出身,望班上高手不吝赐教。 |
|
|
F***Q 发帖数: 6599 | 11 convert your db to sqlite, and write an efficient sql script.
you bottleneck is likely your algorithm and db engine, not the hardware. if
you don't address the problem at its origin, you will hit another bottleneck
even you upgrade to the latest hardware. |
A*j 发帖数: 12 | 12 用Access自带的SQL语句去做查询和更新表的操作
不要用VBA,那样相当于又多了一层壳去操作数据
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
d******a 发帖数: 32122 | 13 关键字段设index了吗?
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
t*****z 发帖数: 1598 | 14 感觉可以用一个稍微复杂的SQL命令就搞定的,性能会大大提高。
【在 s**u 的大作中提到】 : 要做如下的一个任务在本地一个大约700兆的access数据库里: : A表有2百万个记录,每个记录20个字段吧;B表有50万个记录每条记录10个字段。 : 需要针对A表里的每个记录一个字段值在B表中查询,根据查询结果做一些日期的逻辑判 : 断最后更新A表中的三个字段。 : 现在的电脑是这个配置:i5-2400 3.1G + 20G RAM + 512 SSD : 写了段VBA做上面的任务,处理提条记录需要0.12秒。整整一个周末没跑完! : 如果想显著提高速度(比如提高10倍)需要一个什么样的硬件配置?软件解决方法有啥 : ?Python会快么?本人斧头帮出身,望班上高手不吝赐教。
|
s**u 发帖数: 105 | 15 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。
更新一下结果:
SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行
时间是。。。惊人的!
居然3分钟不到!!!!3分钟不到!!!3分钟不到!!!
3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。
我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了?
4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意
思是把B表按Field_B排序么?
还请各位不吝赐教! |
F***Q 发帖数: 6599 | 16
了?
https://www.progress.com/tutorials/odbc/using-indexes
again, if you convert your database to sqlite, I am sure you can cut the run
-time even more. 3 min still sounds high for your db size.
free converters are available at
https://www.sqlite.org/cvstrac/wiki?p=ConverterTools
just search "MDB"
【在 s**u 的大作中提到】 : 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。 : 更新一下结果: : SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行 : 时间是。。。惊人的! : 居然3分钟不到!!!!3分钟不到!!!3分钟不到!!! : 3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。 : 我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了? : 4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意 : 思是把B表按Field_B排序么? : 还请各位不吝赐教!
|
t*********u 发帖数: 26311 | 17 你不会是对数据库用vba的loop吧?
了?
----
☆ 买买提 For Windows 10 -- ☆ 大本出品 ☆
【在 s**u 的大作中提到】 : 十分感谢楼上对斧头邦的栽培!看来各位觉得硬件OK,应该是软件问题。 : 更新一下结果: : SQL我连斧头帮都算不上,硬着头皮写了一个join的东西,基本达到了VBA的效果。运行 : 时间是。。。惊人的! : 居然3分钟不到!!!!3分钟不到!!!3分钟不到!!! : 3楼说VBA要加一层壳,这个我完全同意。这个壳能慢这么多?从60几个小时到3分钟。 : 我感觉VBA纯粹是一条一条的过,A表逐条需要.edit,然后.update。SQL好想是批处理了? : 4楼谈到关键字索引。比如说我在B表的Field_B中查找A表的Field_A中的数值。您的意 : 思是把B表按Field_B排序么? : 还请各位不吝赐教!
|
s**u 发帖数: 105 | 18 正是!
【在 t*********u 的大作中提到】 : 你不会是对数据库用vba的loop吧? : : 了? : ---- : ☆ 买买提 For Windows 10 -- ☆ 大本出品 ☆
|
s**u 发帖数: 105 | 19 谢谢您的指点。对关键字加了索引之后,速度提升了将近240倍!单条记录处理时间由0
.12秒提高到了0.00055秒!
对FangQ的指点和信息一并致谢,您提到的Sqlight还没来得及试用。等有结果了再来汇
报。
【在 d******a 的大作中提到】 : 关键字段设index了吗?
|
p******t 发帖数: 156 | 20 大量数据处理,表连接和索引效率最高,循环处理效率最慢,这个是SQL程序员最基本
的知识。VBA可能也有相应的表连接操作指令,处理这点数据量分分钟的事。 |
d******a 发帖数: 32122 | 21 vba可以直接用SQL,所以VBA本身不会怎么慢,即便加了层壳,也是薄如蝉翼
: 大量数据处理,表连接和索引效率最高,循环处理效率最慢,这个是SQL程序员
最基本
: 的知识。VBA可能也有相应的表连接操作指令,处理这点数据量分分钟的事。
【在 p******t 的大作中提到】 : 大量数据处理,表连接和索引效率最高,循环处理效率最慢,这个是SQL程序员最基本 : 的知识。VBA可能也有相应的表连接操作指令,处理这点数据量分分钟的事。
|
d******a 发帖数: 32122 | 22 不加index好比在一本书里顺序阅读查找一个词
加了index当然快多了
如果你就是自己用,看不出有什么必要转成SQLite. 用过这么多数据库,最好用的是
access和sql server
: 谢谢您的指点。对关键字加了索引之后,速度提升了将近240倍!单条记录处理
时间由0
: .12秒提高到了0.00055秒!
: 对FangQ的指点和信息一并致谢,您提到的Sqlight还没来得及试用。等有结果了
再来汇
: 报。
【在 s**u 的大作中提到】 : 谢谢您的指点。对关键字加了索引之后,速度提升了将近240倍!单条记录处理时间由0 : .12秒提高到了0.00055秒! : 对FangQ的指点和信息一并致谢,您提到的Sqlight还没来得及试用。等有结果了再来汇 : 报。
|