【问题标题】:Fastest way to query SQL Server CE database file in Windows Mobile 6.5?在 Windows Mobile 6.5 中查询 SQL Server CE 数据库文件的最快方法是什么?
【发布时间】:2015-08-26 04:32:52
【问题描述】:

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

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

我尝试的最后一件事是使用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();
}

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

【问题讨论】:

  • 在姓氏上创建索引。
  • 谢谢!做到了..第一次扫描时为 8 秒,下一次扫描时为 1 秒。如何预加载列索引以隐藏第一次扫描的延迟?
  • 不确定。你可以在后台第一次启动时这样做,我想......

标签: dataset sql-server-ce windows-mobile windows-mobile-6.5 sqlcedatareader


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 您是否在设置阶段以某种方式预取或预填充这些索引?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多