在你将这个问题标记为重复之前,请听我说! 我已经阅读了这里关于如何提高性能的问题,例如仅举几个例子Improve INSERT-per-second performance of SQLite?和What are the performance characteristics of sqlite with very large database files?
我正在努力让sqlite与5 GB大小的数据库文件一起工作。 相反,有些人声称,即使数据库大小为160 GB,sqlite也可以“很好地”工作。 我自己还没有尝试过,但从所提出的问题来看,我猜所有基准测试可能只是在数据库中的一个表中完成。
我正在使用具有以下特点的数据库: - 大约20个表 - 其中有一半以上的表具有15列以上 - 这些15列左右的表中的每个都有6/7个外键列 - 其中一些表已经增长到拥有2700万条记录,时间不到一个月
我使用的开发机器是3 GHz四核机器,带有4 GB的RAM,但是仍然需要超过3分钟才能查询这些大表中的行数。
我找不到任何水平分区数据的方法。 我最好的办法是将数据分割成多个数据库文件,每个表一个文件。 但是,在这种情况下,据我所知,无法使用外键列约束,因此我必须创建一个自给自足的表(没有任何外键)。
所以我的问题是: a)我是否在错误的数据库中工作? b)你认为我在哪里出错了? c)我尚未在外键上添加索引,但如果仅查询行数需要四分钟,外键索引如何帮助我?
编辑 提供更多信息即使没有人要求 :)我正在使用SQLite 3.7.9版本和system.data.sqlite.dll 1.0.77.0版本 编辑2: 我认为与160GB的人不同的是,他们可能会选择一个单独的记录或一小段记录。但我必须加载表中的全部2700万行数据,并将它们与另一个表连接,按用户要求分组记录并返回结果。请提供任何关于如何最优化数据库以实现此类结果的建议。
在我的情况下,无法缓存先前查询的结果,因为这没有意义。命中缓存的几率相当低。
我正在使用具有以下特点的数据库: - 大约20个表 - 其中有一半以上的表具有15列以上 - 这些15列左右的表中的每个都有6/7个外键列 - 其中一些表已经增长到拥有2700万条记录,时间不到一个月
我使用的开发机器是3 GHz四核机器,带有4 GB的RAM,但是仍然需要超过3分钟才能查询这些大表中的行数。
我找不到任何水平分区数据的方法。 我最好的办法是将数据分割成多个数据库文件,每个表一个文件。 但是,在这种情况下,据我所知,无法使用外键列约束,因此我必须创建一个自给自足的表(没有任何外键)。
所以我的问题是: a)我是否在错误的数据库中工作? b)你认为我在哪里出错了? c)我尚未在外键上添加索引,但如果仅查询行数需要四分钟,外键索引如何帮助我?
编辑 提供更多信息即使没有人要求 :)我正在使用SQLite 3.7.9版本和system.data.sqlite.dll 1.0.77.0版本 编辑2: 我认为与160GB的人不同的是,他们可能会选择一个单独的记录或一小段记录。但我必须加载表中的全部2700万行数据,并将它们与另一个表连接,按用户要求分组记录并返回结果。请提供任何关于如何最优化数据库以实现此类结果的建议。
在我的情况下,无法缓存先前查询的结果,因为这没有意义。命中缓存的几率相当低。