2014-01-22 69 views
1

如何加快这里的速度并更快地更新行? 我知道这不应该是这样,任何人都可以推荐一个更好的做法。如何在VB.net中更快速地查询和更新

谢谢

Public Sub searchUpdate() 
    strSQL = "*Large query, including 3 tables" 

    cmd = New MySqlCommand(strSQL, CONNECTION) 
    dr = cmd.ExecuteReader() 
    ListView1.Items.Clear() 

    Do While dr.Read() 
     a = (dr.Item("users").ToString()) 
     b = (dr.Item("b1").ToString() & "," & dr.Item("b2").ToString() & "," & dr.Item("b3").ToString() & "," & dr.Item("b4").ToString() & "," & dr.Item("b5").ToString() & "," & dr.Item("b6").ToString()) 
     won = (dr.Item("number").ToString) * (dr.Item("input").ToString()) 
     qt = (dr.Item("input").ToString) 
     updateForSearch(a, won, qt) 

    Loop 
    dr.Close() 
    cmd.Dispose() 
    CONNECTION.Close() 
    TextBox1.Text = Val(TextBox1.Text) + 1 
    Timer2.Stop() 

End Sub` 

功能更新:

Public Function updateForSearch(ByVal a As String, ByVal won As Integer, ByVal qt As Integer) As Integer 
    dr.Close() 
    strSQL = "UPDATE users SET status=2, qt='" & qt & "', bcvd='" & won & "' WHERE acvd='" & a & "'" 
    Dim da As New MySqlDataAdapter(strSQL, CONNECTION) 
    da.Fill(ds) 
    dr = cmd.ExecuteReader() 

End Function 

回答

1

这个例子说明了如何可以甚至没有去VB.net如果运行更新

UPDATE users u 
    JOIN tbl1 t1 on u.col1 = t1.col1 
    JOIN tbl2 c on t1.col2 = t2.col2 
    -- join more tables 
SET 
    u.col_a = t1.col3, ...... 
WHERE .... 

基本上,你可以将你的更新表加入你的选择中的大连接 - 你可以做到这一点,而不会使数据离开数据库。这会提高性能,大的时间,首先 - 因为数据不是旅行,第二 - 因为现在这是批量与排一个一个

可能是您创建视图的最佳方式您的复杂查询,然后使用该视图进行更新。规则仅为3:

1 - 您的视图必须返回用于“用户”中字段分配的字段。

2 - 您的视图必须返回用于与“用户”连接的字段。

3 - 您的观点可能需要汇总,你必须有不超过然后在内部一个匹配值加入

+0

顺便说一句,这是我的查询:HTTP://pastebin.com/cTM1TgTj – user3224535

+0

这是引擎收录和我的查询是2000字符太长回复这里 – user3224535

+0

@ user3224535好的。该查询对我来说并不合适,而且我发现与问题无关。有问题的你选择“用户”,“b2”,“数字”,“输入”。可能对你来说最好的办法是从复杂查询中创建一个'View',然后使用该视图进行更新。规则仅为3:1 - 您的视图必须返回用于“用户”中字段分配的字段。 2 - 您的视图必须返回用于与“用户”加入的字段。 3.你的视图可能需要被聚合,你必须在'inner join'中有一个以上的匹配值。然后它会工作 –