Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite windows phone 7 emulator中多对多查询运行缓慢_Sqlite_Windows Phone 7_Many To Many - Fatal编程技术网

Sqlite windows phone 7 emulator中多对多查询运行缓慢

Sqlite windows phone 7 emulator中多对多查询运行缓慢,sqlite,windows-phone-7,many-to-many,Sqlite,Windows Phone 7,Many To Many,我的应用程序正在使用sqlite作为数据库。在数据库中,我有一个多对多关系。当我使用用于firefox的sqlite插件/工具时,在多对多中连接表的sql查询运行得非常快。但是,当我在emulator上运行相同的查询时,它需要很长的时间(5分钟或更长)。因此,我甚至还没有在真正的设备上试用过 有人能告诉我发生了什么事吗 例如,我有3张桌子。 1.创建表person(id整数,name文本); 2.创建表格课程(id整数,名称文本); 3.创建表注册(personId integer、course

我的应用程序正在使用sqlite作为数据库。在数据库中,我有一个多对多关系。当我使用用于firefox的sqlite插件/工具时,在多对多中连接表的sql查询运行得非常快。但是,当我在emulator上运行相同的查询时,它需要很长的时间(5分钟或更长)。因此,我甚至还没有在真正的设备上试用过

有人能告诉我发生了什么事吗

例如,我有3张桌子。 1.创建表person(id整数,name文本); 2.创建表格课程(id整数,名称文本); 3.创建表注册(personId integer、courseId integer)

我尝试过的sql语句如下所示

select * 
from person, course, registration
where registration.personId = person.id and registration.courseId = course.id
select *
from person inner join registration on person.id=registration.personId
inner join course on course.id=registration.courseId
以及以下内容

select * 
from person, course, registration
where registration.personId = person.id and registration.courseId = course.id
select *
from person inner join registration on person.id=registration.personId
inner join course on course.id=registration.courseId
我正在使用来自的sqlite客户端。注册表中有4800条记录,人员表中有4000条记录,课程表中有1000条记录


这是我的疑问吗?它只是sqlite客户端吗?这是记录大小吗?如果这个问题无法在应用程序上解决,恐怕我必须远程推送数据库(这意味着我的应用程序必须使用互联网)

当你开始进行这些连接时,你可能会得到大量的记录。在这个操作过程中,内存是什么样的

假设您已经适当地调整了索引,而不是使用连接,我将尝试三个单独的查询

<>或者是考虑重构你的数据,所以它只包含你在应用程序中需要的东西。
您还应该只返回所需的字段。

当您开始执行这些连接时,您可能会得到大量的记录。在这个操作过程中,内存是什么样的

假设您已经适当地调整了索引,而不是使用连接,我将尝试三个单独的查询

<>或者是考虑重构你的数据,所以它只包含你在应用程序中需要的东西。
您还应该只返回所需的字段。

是的,这是您的查询。你不会侥幸逃脱,你可以在移动设备上做你想做的事。你必须记住你不是在电脑上运行的,所以你必须以不同的方式思考如何处理事情(代码和用户界面)。内存不足、磁盘访问速度慢、处理器速度慢、没有虚拟内存等等。你必须做出妥协

我敢肯定,无论你在做什么,都完全可以在手机上完成,而不需要非现场服务器,但你需要聪明一点。例如,真的有必要一次将所有4800多条记录加载到内存中吗?几乎可以肯定,用户不可能同时查看所有4800。忘记数据库速度,仅仅在列表框中显示这么多的项目,会扼杀应用程序的性能

即使性能非常完美,显示4800个项目真的是一种很好的用户体验吗?当然,允许用户输入搜索词会更好,并允许您将列表过滤到更易于管理的大小。能否实现分页,以便只显示前10条记录,并让用户单击下一步查看下10条记录

你可能还想考虑去规范你的数据库,这样你只有一个表而不是3个表。它将大大提高性能。是的,这与学校里教给你的关于数据库的一切都背道而驰,但就像我说的:电话=妥协。请记住,这不是一个大型OLTP关键任务数据库,它是一个电话应用程序-没有人关心您的数据库是否处于第三正常状态。还要记住,你给手机做的工作越多(通过数据建立连接时发出的嗡嗡声),你的应用程序消耗的电池电量就越大

最后,如果您绝对认为必须给用户一个4800条记录的列表以供滚动浏览,那么您应该看看某种数据虚拟化技术。这给了用户一种错觉,他们在一个长长的列表中滚动,即使在任何给定的时间实际上只加载了几个项目


P>但是简短的回答是:是的,这样的查询会有问题,你需要考虑改变它们。

YP,这是你的查询。你不会侥幸逃脱,你可以在移动设备上做你想做的事。你必须记住你不是在电脑上运行的,所以你必须以不同的方式思考如何处理事情(代码和用户界面)。内存不足、磁盘访问速度慢、处理器速度慢、没有虚拟内存等等。你必须做出妥协

我敢肯定,无论你在做什么,都完全可以在手机上完成,而不需要非现场服务器,但你需要聪明一点。例如,真的有必要一次将所有4800多条记录加载到内存中吗?几乎可以肯定,用户不可能同时查看所有4800。忘记数据库速度,仅仅在列表框中显示这么多的项目,会扼杀应用程序的性能

即使性能非常完美,显示4800个项目真的是一种很好的用户体验吗?当然,允许用户输入搜索词会更好,并允许您将列表过滤到更易于管理的大小。能否实现分页,以便只显示前10条记录,并让用户单击下一步查看下10条记录

你可能还想考虑去规范你的数据库,这样你只有一个表而不是3个表。它将大大提高性能。是的,这与学校里教给你的关于数据库的一切都背道而驰,但就像我说的:电话=妥协。请记住,这不是一个大型OLTP关键任务数据库,它是一个电话应用程序-没有人关心您的数据库是否处于第三正常状态。还要记住,你给手机做的工作越多(通过数据建立连接时发出的嗡嗡声),你的应用程序消耗的电池电量就越大

最后,如果您绝对认为必须为用户提供一个包含4800条记录的列表,则