1

.sdf在 Windows 移动设备上有一个需要查询的大型数据库文件。该文件有 40,000 条记录。我正在尝试缩短执行查询所需的时间。目前大约是 8 秒,这对于用户等待结果来说是很长的时间。

起初我一直在使用DataSet, 通过建立一个SqlCeConnection连接到数据集的填充适配器。也尝试与 类似DataTable,性能结果几乎相同。在大约 8 秒内使用DataSet或完成查询。DataTable

我尝试的最后一件事就是使用Reader(). 它给了我更好的结果,但只有半秒(查询在约 7.5 秒内完成)。

string lastName;
lastName = "";
string connectionString = @"Data Source='/Path/To/MyDatabase.sdf' Max Database Size = 128; Max Buffer Size = 1024;";
string strSql = "SELECT LastName FROM employee_list WHERE LastName = 'Johnson'";

using (SqlCeConnection mConnection = new SqlCeConnection(connectionString))
{
    mConnection.Open();

    using (SqlCeCommand mCommand = new SqlCeCommand(strSql, mConnection))
    {
        using (SqlCeDataReader reader = mCommand.ExecuteReader())
        {
            while (reader.Read())
            {
                lastName = (string)reader["LastName"];
            }
        }

        mCommand.Dispose();
    }

    mConnection.Close();
    mConnection.Dispose();
}

有什么想法可以让我更快吗?

4

1 回答 1

0

我遇到了类似的问题,但在 iOS 上,我们需要查询超过 100,000 条记录。最初我们使用的是一种技术……类似于 Windows 世界中的实体框架(称为 CoreData)……执行时间超过 15 秒(查询中的 20 多个字段)。我们改变了这个:

1) 它现在直接使用 SQLite 进行 2 部分查询。第 1 部分仅查询 3 个字段,并且已编入索引。

2) 第 2 部分是运行的后续查询,它获取用户感兴趣的“真实细节”。

这对我们有用,因为用户首先看到的只是一个列表,此时不需要完整的数据集。只有在选择特定行时,它们才需要执行完整的“第 2 部分”查询。

不知道这是否对您有帮助,但它将我们的查询时间缩短到 ~ 1100 毫秒,这在我们的特定情况下是一个巨大的改进。

于 2015-06-12T04:17:13.363 回答