以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 数据加载速度优化--甜版请进  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62440)

--  作者:Gryvip
--  发布时间:2015/1/1 1:33:00
--  [求助] 数据加载速度优化--甜版请进
甜版,你好,有个问题想请教你;

本地外部数据源Access,有约600万条记录,加载其中约7万行数据,用时75秒,正常吗,可以以提升速度吗,请抽空赐教,谢谢。

Access数据文件450MB,就不上传文件了,代码如下:

初始加载表不加载数据,加载按钮代码如下:(其中变量内容:sh000001,sh600489,……,由30多个不同的股票代码组成)

DataTables("历史数据").LoadFilter = "[股票代码] in ("& Functions.Execute("HS加载股票") &")"

DataTables("历史数据").Load
[此贴子已经被作者于2015-1-1 1:34:34编辑过]

--  作者:飞飞
--  发布时间:2015/1/1 4:52:00
--  
想不到好办法
--  作者:lsy
--  发布时间:2015/1/1 8:04:00
--  
DataTables("历史数据").LoadFilter = "[股票代码] in ("& Functions.Execute("HS加载股票") &")"
这个in 就注定了,肯定慢。

我这里有5万5千条数据,60列,从分页到全部加载完毕,用时不到7秒。

加载速度除了与记录条数有关,与列数关系也很大,不知道你有多少列。

请把全部数据压缩后,通过网盘发上来,正需要大数据测试。

--  作者:Gryvip
--  发布时间:2015/1/1 14:41:00
--  
列数不多,只有9列,如果不用in ,还有其他更好的方法吗?或把你7秒的代码贴上来,谢谢!

Access数据文件压缩后129MB,已上传网盘(提取码:e340):http://yunpan.cn/cyj26pk7j4tz4

[此贴子已经被作者于2015-1-1 15:15:26编辑过]

--  作者:游
--  发布时间:2015/1/1 21:58:00
--  
1、在数据库中 给 历史数据的 股票代码 设置重复索引

2、加载时关闭表刷新和自动列宽

--  作者:Gryvip
--  发布时间:2015/1/2 12:15:00
--  
1、在数据库中 给 历史数据的 股票代码 设置重复索引

2、加载时关闭表刷新和自动列宽


你好,没安装Access,且不懂设置重复索引,另外关闭表刷新和自动列宽,在帮助里没找到,请贴出代码,谢谢。


--  作者:逛逛
--  发布时间:2015/1/2 12:47:00
--  

在命令窗口执行

 

Dim cmd As New SQLCommand
cmd.Connection Name = 数据源名称    ‘记得把Name前面的空格去掉
cmd.CommandText = "Create Index iDate ON 历史数据 ([股票代码])"
cmd.ExecuteNonQuery()

 

 

再用你自己的方法加载测试

 

关闭表刷新用

StopRedraw

ResumeRedraw


--  作者:lsy
--  发布时间:2015/1/3 8:54:00
--  
惊人的速度差:

4
144

分页加载,每页30行,分页只需1秒多的时间,全部加载完毕,也仅需数秒。

索引用的恰当,效率太可观。

以前不太重视索引,因为一直没有大数据测试,顶多是几万行,用不用索引,速度上没感觉。

[此贴子已经被作者于2015-1-3 9:00:56编辑过]

--  作者:Gryvip
--  发布时间:2015/1/3 16:24:00
--  
以下是引用逛逛在2015-1-2 12:47:00的发言:

在命令窗口执行

 

Dim cmd As New SQLCommand
cmd.Connection Name = 数据源名称    ‘记得把Name前面的空格去掉
cmd.CommandText = "Create Index iDate ON 历史数据 ([股票代码])"
cmd.ExecuteNonQuery()

 

 

再用你自己的方法加载测试

 

关闭表刷新用

StopRedraw

ResumeRedraw


--  作者:Gryvip
--  发布时间:2015/1/3 16:33:00
--  
以下是引用逛逛在2015-1-2 12:47:00的发言:

在命令窗口执行

 

Dim cmd As New SQLCommand
cmd.Connection Name = 数据源名称    ‘记得把Name前面的空格去掉
cmd.CommandText = "Create Index iDate ON 历史数据 ([股票代码])"
cmd.ExecuteNonQuery()

 

 

再用你自己的方法加载测试

 

关闭表刷新用

StopRedraw

ResumeRedraw

谢谢逛逛,命令窗口执行的是为(历史数据的[股票代码]列)创建索引,是吗,执行代码后速度提升到了22万行用时6秒(原来没索引是7万行用时75秒),速度提升了约30倍,太感谢你啦,逛逛,在此建议狐爸要把你这个“创建索引”的代码写进帮助里,因为索引对加载速度影响太大了,现时帮助里面没找到这个。

另外关闭表刷新对加载的速度不明显。
[此贴子已经被作者于2015-1-3 16:41:42编辑过]