首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WP7 SQL Server CE查询优化

WP7 SQL Server CE查询优化
EN

Stack Overflow用户
提问于 2012-06-04 18:44:34
回答 1查看 506关注 0票数 0

编辑:我已经阅读了更多关于这个主题的内容,并意识到,contrary to what is suggested,我只包含了我为桌面应用程序生成的与移动应用程序相同的.sdf文件。由于台式机/移动端的索引格式似乎不同(我读到了关于第一个数据库连接需要更长时间的警告,因为如果这样做,here会重建索引),而且我从安装文件夹中以只读方式打开数据库,会不会是引擎完全忽略了我的索引,因为它不能转换它们?

我有一个SQL Server CE3.5数据库,它只有一个表Entities,大约有146,000行和以下列:Id (int, primary key), Gloss (nvarchar(4000)), GlossLen (int), Meaning (nvarchar(4000),以及GlossGlosslen上的索引。我正在为Windows (WPF)和WP7.5开发一个跨平台的应用程序。

然后,我使用LINQ to SQL对数据库运行以下查询:

代码语言:javascript
运行
复制
(from d in Entities 
 where d.Gloss.StartsWith("searchstring") 
 orderby d.GlossLen ascending 
 select new 
        { Id = d.Id, WrittenForms = d.Gloss, MeaningsString = d.Meaning, 
          MatchString = d.Gloss, MatchStringLen = d.GlossLen }).Take(200)

我面临的问题是,虽然查询在Windows中以合理的速度(2秒或更短)执行,但在实际的WP7设备上(仿真器几乎和WPF一样快),它变得极其缓慢(WPF秒)。

据我所知,生成的SQL似乎是合理的:下面是LINQPad返回的内容。

代码语言:javascript
运行
复制
SELECT TOP (200) 
    [t0].[Id], [t0].[Gloss] AS [WrittenForms], [t0].[Meaning] AS [MeaningsString], 
    [t0].[GlossLen] AS [MatchStringLen]
FROM [Entities] AS [t0]
WHERE [t0].[Gloss] LIKE @p0
ORDER BY [t0].[GlossLen]

Visual Studio报告的查询执行计划是: Index Seek->Filter->Sort->Select,所以我不是在执行表扫描。

我也已经尝试在LINQ查询上使用CompiledQuery.Compile,存储生成的Func以供重用,但没有看到任何改进。

我做错了什么?WP7和WPF代码路径之间的唯一区别是从安装文件夹以只读方式打开WP7数据库。

EN

回答 1

Stack Overflow用户

发布于 2012-06-04 19:23:08

你没有做错任何事,但是WP7 != Windows。我也有类似的问题,由于索引太宽,我创建了一个只有前12个字符的列,并对其进行了索引和搜索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10880002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档