以文本方式查看主题

-  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种不同数据量。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.rar


--  作者:有点甜
--  发布时间: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 st As Date = Date.Now

Dim com2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim com3 As WinForm.ComboBox = e.Form.Controls("ComboBox3")


Dim zgsztnd As String = com2.Value

Dim zgsztyf As String = com3.Value

Dim com As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim zfc As String

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"
zfc = zfc.Replace("dtpzzbwb",com.Value)

output.show(zfc)

\'MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

\'MessageBox.Show(zfc)

Dim cmd As New SQLCommand
Dim kmmxz As DataTable
cmd.CommandText = zfc
kmmxz = cmd.ExecuteReader()

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

 

Dim tb As WinForm.Table = e.Form.Controls("Table1")
tb.Table.DataSource = kmmxz
tb.Table.Cols("横向科目").Width = 200
tb.Table.Cols("pzzb7").Width = 200
tb.Table.Cols("纵向科目").Width = 120
tb.Table.Cols("pzzb12").Width = 150
tb.Table.AllowEdit = True