Vb.net 数据搜索浏览时间长

Vb.net 数据搜索浏览时间长,vb.net,winforms,ms-access,Vb.net,Winforms,Ms Access,我创建了一个应用程序,允许用户从我的数据库中浏览数据。代码可以工作,但唯一的问题是加载搜索结果花费了很多时间。这是因为Access数据库的每个表中都有大约100万行数据。窗口窗体加载也需要一些时间。。。有人知道如何缩短数据搜索时间吗 Private Sub MovieBrowser_Load(sender As Object, e As EventArgs) Handles MyBase.Load conn = New OleDbConnection("Provider=Micr

我创建了一个应用程序,允许用户从我的数据库中浏览数据。代码可以工作,但唯一的问题是加载搜索结果花费了很多时间。这是因为Access数据库的每个表中都有大约100万行数据。窗口窗体加载也需要一些时间。。。有人知道如何缩短数据搜索时间吗

Private Sub MovieBrowser_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1MDb.accdb;Persist Security Info=False;")
        strSQL = "SELECT m.primaryTitle AS MovieTitle, m.startYear AS StartYear, m.runtimeMinutes AS Runtime, m.genres AS Genre, d.primaryName AS Director, c.writers AS Writer, r.averageRating AS Rating, d.primaryProfession AS Profession, ('www.imdb.com/title/' + m.tconst) AS URL From Movie m, Director d, Crew c, Rating r WHERE m.tconst=c.tconst AND d.nconst = c.directors AND r.tconst=m.tconst"

        conn.Open()
        da = New OleDbDataAdapter(strSQL, conn)
        Dim ds As New DataSet("Movies1")
        'fills the dataset with data
        da.Fill(ds, "Movies1")
        'assign the datasource to the DataGridView
        DataGridView1.DataSource = ds.Tables("Movies1")
        conn.Close()

        txtSrchbar.Focus()
End Sub


把整张桌子都拖走是没有意义的

银行机器不会加载每个帐户,然后让您进行搜索

web浏览器不会加载整个internet,然后让您进行搜索

100万行不是访问的大量数据

简单地在表单顶部放置一些文本框或类似的文本框

让用户输入发票号或其他条件,然后加载网格

您不想使用网格进行搜索,而只想显示数据

所以,假设我们正在搜索某一年的电影

顶部可能有一个名为“零件号”的文本框。usr输入零件号,或者说电影年,那么您的sql变成:

strSQL = "your sql”

strSQL = strSQL & " AND MovieYear = " & me.txtMyear

' code to fill the grid.
现在网格将只加载当年的电影。您可以添加其他搜索框

确保搜索的任何列都有索引


即使有一百万行,拉入和限制发送到网格中的结果也应该非常快。访问数据引擎对于此类操作非常快速

拉整张桌子是没有意义的

银行机器不会加载每个帐户,然后让您进行搜索

web浏览器不会加载整个internet,然后让您进行搜索

100万行不是访问的大量数据

简单地在表单顶部放置一些文本框或类似的文本框

让用户输入发票号或其他条件,然后加载网格

您不想使用网格进行搜索,而只想显示数据

所以,假设我们正在搜索某一年的电影

顶部可能有一个名为“零件号”的文本框。usr输入零件号,或者说电影年,那么您的sql变成:

strSQL = "your sql”

strSQL = strSQL & " AND MovieYear = " & me.txtMyear

' code to fill the grid.
现在网格将只加载当年的电影。您可以添加其他搜索框

确保搜索的任何列都有索引


即使有一百万行,拉入和限制发送到网格中的结果也应该非常快。访问数据引擎对于此类操作非常快速

不要存储/尝试重用连接。需要时创建一个新的,并将其就地处置。可能使用块将其声明封装在
中。包括DataAdapter和命令(如果存在)。应用程序中的瓶颈可能是数据量。获取一百万组数据并将其放入数据网格确实需要一些时间。通过优化数据库(通过使用正确的索引),您可能会稍微加快抓取速度,但我担心大部分时间都会从UI中花费来呈现数据。也许你可以修改你的代码,只在点击次数少于1000次时显示搜索结果。否则,您可能会显示“搜索结果太多”之类的内容。您知道2GB的限制吗?移动到Sql Server(Express Edition是免费的)或MySQL、MariaDB或Postgre。数据库的查询时间与适当的索引和数据量密切相关。Where子句中的所有字段都编制了索引?您应该使用Where子句在SQL查询中进行搜索,首先获取所有数据,然后进行搜索。顺便问一下,正如我在这里注意到的最后一个问题,您是否尝试过将
MS Access
作为前端?这比.Net更易于在数据库中使用(创建带有绑定字段的表单所需的时间更短,因为几乎所有需要的内容都可以从头开始使用)。我不喜欢MS Access作为后端数据库(在使用数据库时尝试备份数据,没有解释,没有存储过程,多用户性能差等等),但没有前端比它更棒!添加索引,避免像查询过滤器一样,使用查询分解。不要将所有数据加载到数据网格,但可能只加载前1000个。不要存储/尝试重用连接。需要时创建一个新的,并将其就地处置。可能使用
块将其声明封装在
中。包括DataAdapter和命令(如果存在)。应用程序中的瓶颈可能是数据量。获取一百万组数据并将其放入数据网格确实需要一些时间。通过优化数据库(通过使用正确的索引),您可能会稍微加快抓取速度,但我担心大部分时间都会从UI中花费来呈现数据。也许你可以修改你的代码,只在点击次数少于1000次时显示搜索结果。否则,您可能会显示“搜索结果太多”之类的内容。您知道2GB的限制吗?移动到Sql Server(Express Edition是免费的)或MySQL、MariaDB或Postgre。数据库的查询时间与适当的索引和数据量密切相关。Where子句中的所有字段都编制了索引?您应该使用Where子句在SQL查询中进行搜索,首先获取所有数据,然后进行搜索。顺便问一下,正如我在这里注意到的最后一个问题,您是否尝试过将
MS Access
作为前端?这比.Net更易于在数据库中使用(创建带有绑定字段的表单所需的时间更短,因为几乎所有需要的内容都可以从头开始使用)。我不喜欢MS Access作为后端数据库(在使用数据库时尝试备份数据,没有解释,没有存储过程,多用户性能差等等),但没有前端比它更棒!添加索引,避免像查询过滤器一样,使用查询分解。不要将所有数据加载到数据网格,但可能只加载前1000个。