以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 实例请教甜大师 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=106175) |
||||
-- 作者:hbhb -- 发布时间:2017/9/3 23:53:00 -- 实例请教甜大师 大师:见实例,请问如何优化达到目的的代码?实例中4种不同数据量。
|
||||
-- 作者:有点甜 -- 发布时间:2017/9/4 9:08:00 -- 没看懂你的项目。你要优化哪里的代码?你那些代码都是无法再优化的。
加载的数据量越大,越慢。 |
||||
-- 作者:有点甜 -- 发布时间:2017/9/4 9:13:00 -- 如果要加快加载数据速度,那就用外部数据源,然后设置索引。 |
||||
-- 作者:hbhb -- 发布时间:2017/9/4 12:01:00 -- 方法或思路优化也行呀,只要达到目的就行。 这样测试: (1)最小数据测试 第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb1,第二个选择2014,第三个选择01。 第二部:点击加载表 第三部:点击生成明细账(我就要生成这样的目标样式查询表) (2)小数据测试 第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb889,第二个选择2013,第三个选择01。 第二部:点击加载表 第三部:点击生成明细账 (3)中等数据测试 第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb900,第二个选择2013,第三个选择01。 第二部:点击加载表 第三部:点击生成明细账,(2000多行数据,这一步要运行10多秒) (4)大数据数据测试 第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb888,第二个选择2013,第三个选择01。 第二部:点击加载表 第三部:点击生成明细账,(40000多行数据,要运行何年马月?) |
||||
-- 作者:有点甜 -- 发布时间:2017/9/4 12:41:00 -- 直接说明你生成表的逻辑是什么?没看懂你sql语句的意思。
尽量不要用子查询,多个表的情况,请尽量用 inner join 连接 。
再有就是,改成外部数据源,数据库那里加上索引。 |
||||
-- 作者:hbhb -- 发布时间:2017/9/4 12:56:00 -- 逻辑很简单! 比如: 我要查询同一张表的a列=“好”,对应的b列的值的其他列的分组统计结果,同时增加一c列,在c列中的每一行填写“好”。
|
||||
-- 作者:有点甜 -- 发布时间:2017/9/4 21:45:00 -- 参考代码,不到万不得已,不要用子查询。
\'\'\'
Dim com2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim zgsztyf As String = com3.Value Dim com As WinForm.ComboBox = e.Form.Controls("ComboBox1") zfc = "select 纵向科目, c.pzzb5,c.pzzb6,c.pzzb7, sum(d.pzzb8) as pzzb8,sum(d.pzzb9) as pzzb9,c.pzzb12,c.pzzb44,c.pzzb45,\'\' as 横向科目 ,1*0 as 金额 from (Select distinct a.pzzb12 As 纵向科目, a.pzzb5,b.pzzb6,a.pzzb7,b.pzzb12 as pzzb12,a.pzzb44,a.pzzb45 from (select pzzb5,pzzb6,pzzb7,pzzb12,pzzb44,pzzb45 from {dtpzzbwb} where pzzb2 = \'" & zgsztnd & "\' and pzzb3 <= \'" & zgsztyf & "\' and pzzb12 in (\'股本\', \'固定资产\',\'现金\', \'银行存款\') group by pzzb12,pzzb5,pzzb6,pzzb7,pzzb44,pzzb45) as a left join {dtpzzbwb} as b on a.pzzb5=b.pzzb5) as c inner join {dtpzzbwb} as d on c.pzzb5=d.pzzb5 and c.pzzb12=d.pzzb12 and iif(c.pzzb6 is null, true, c.pzzb6=d.pzzb6) group by 纵向科目, c.pzzb5,c.pzzb6,c.pzzb7,c.pzzb12,c.pzzb44,c.pzzb45" output.show(zfc) \'MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") \'MessageBox.Show(zfc) Dim cmd As New SQLCommand MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")
Dim tb As WinForm.Table = e.Form.Controls("Table1") |