我正在编写这个帖子,因为我已经整整三天打了这个问题了!
基本上,我有一个程序收集一个大的CSV文件,并将其用作本地SQLCE数据库的输入。 对于这个CSV文件中的每一行(代表某种对象,我们称之为“狗”),我需要知道这条狗是否已经存在于数据库中。 如果它已存在,请不要将其添加到数据库中。 如果它不存在,请在数据库中添加一个新行。
问题是,每个查询大约需要60毫秒(在数据库为空时开始时),当数据库大约1000行时,它会上升到大约80毫秒。 当我必须通过1000行(在我看来并不多)时,这需要大约70000毫秒= 1分10秒(只是为了检查数据库是否是最新的),太慢了!考虑到这个数量可能有一天会超过10000行,我不能指望我的用户在他的数据库同步之前等待超过10分钟。 我尝试使用编译的查询,但这并没有提高性能。
我搜索的字段是一个字符串(它是主键),并且它被索引。
如果有必要,我可以用代码更新这个帖子,这样你就可以看到我做了什么。
答案 0 :(得分:3)
Windows Phone上的SQL CE并不是最快的生物,但您可以对其进行优化:
本文介绍了您可以执行的一些操作:WP7 Local DB Best Practices
他们提供了一个可下载的WP7项目,因此您可以使用该代码。
在本文的顶部,我建议将PK从字符串更改为int;字符串比int占用更多的空间,因此您的索引会更大,并且需要更多时间从隔离存储加载。当然,在SQL Server中,字符串的搜索速度比搜索整数/长整数要慢。