Vb.net 使用OleDbDataReader从Access检索大表(慢速)
我目前正在迁移一个使用VB6构建的旧应用程序。该应用程序主要用于处理Access数据库中的数据。我正在使用DAO库来完成所有的工作。我现在正在将它迁移到VB.net(使用Visual Studio Express 2010)并开始使用OleDb库,但我在速度方面遇到了一个问题。当我试图从一个网络位置打开并迭代一个大约7列2500万行(数据类型主要是双倍数据)的大型表时,大约需要10分钟。当我使用DAO时,我花了大约1.5分钟打开表并浏览所有记录。这是我的应用程序在速度上的一个主要差异,我没有预料到这一点 这是我用来打开该表的过程:Vb.net 使用OleDbDataReader从Access检索大表(慢速),vb.net,ms-access,oledb,oledbdatareader,Vb.net,Ms Access,Oledb,Oledbdatareader,我目前正在迁移一个使用VB6构建的旧应用程序。该应用程序主要用于处理Access数据库中的数据。我正在使用DAO库来完成所有的工作。我现在正在将它迁移到VB.net(使用Visual Studio Express 2010)并开始使用OleDb库,但我在速度方面遇到了一个问题。当我试图从一个网络位置打开并迭代一个大约7列2500万行(数据类型主要是双倍数据)的大型表时,大约需要10分钟。当我使用DAO时,我花了大约1.5分钟打开表并浏览所有记录。这是我的应用程序在速度上的一个主要差异,我没有预料
Public Const ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Public Const DataBasePath = "My DataBase Location"
Public BE As OleDbConnection = New OleDbConnection(ConnectionString & DataBasePath)
Public Sub OpenLargeTable
BE.Open()
Dim QueryExecute As OleDbCommand, DataSet as OleDbDataReader
Try
QueryExecute = New OleDbCommand("Select * From LargeTable Order By Field1, Field2, BE)
DataSet = QueryExecute.ExecuteReader() : DataSet.Read()
QueryExecute.Dispose() : QueryExecute = Nothing
Catch
'Error Handling
End Try
End Sub
我需要对表进行排序,我使用了一个带有ORDERBY子句的SQL语句。我发现,如果没有按顺序排序,它的速度非常快,只是当我排序数据时,与DAO相比,它的速度非常慢。我曾尝试在access数据库中创建一个查询,对记录进行排序,然后调用OleDbCommand对象中SQL语句的查询,但没有帮助。我的问题是,OleDbDataReader是打开大型排序数据集的最佳方法/对象吗
谢谢可能您需要在涉及的列上创建索引Hanks Steve,我已经为这两个字段编制了索引。如果这是一个问题,那么我希望用DAO库执行类似的操作也会很慢,而且速度相对快得多。我知道DAO是最快的,但差别很大。您可以尝试使用ACE而不是JET,但不要期望太多,如果可能的话,将数据库移动到本地。您真的需要加载2500万行吗?是否可以限制需要缩回的行数?