SQLite:实际限制是什么?

WPF*_*Bie 7 sqlite select database-performance

在您将此问题标记为重复之前,请听我说!
我已经阅读过这里提出的关于如何提高性能的问题,例如,提一下提高SQLite的每秒INSERT性能?什么是源码的非常大的数据库文件的性能特点?

我正在努力使sqlite工作的数据库文件大小为5千兆字节.相反,那里有人,即使数据库大小高达160 GB,他们声称sqlite对他们来说"很棒".我自己没有尝试过,但是从提出的问题来看,我想所有的基准测试都可能只用数据库中的表来完成.

我使用的数据库
- 20页左右的表
-表中有一半以上的15列
-每个15或那么列的表都有6/7的外键列-其中的几个表已经长大在一个月内拥有2700万条记录

我使用的开发机器是3 GHz四核机器,有4 GB RAM,但只需要3分钟就可以查询这些大表中的row_count.

我找不到任何方法来水平划分数据.我拥有的最佳镜头是将数据分成多个数据库文件,每个表一个.但在这种情况下,据我所知,外键列约束不能使用,所以我将不得不创建一个自足表(没有任何外键).

所以我的问题是
a)我是否使用错误的数据库进行工作?
b)你觉得我哪里出错了?
c)我还没有在外键上添加索引,但如果只是行计数查询需要四分钟,外键索引如何帮助我?

编辑提供更多信息,即使没有人要求它:)我使用SQLite版本3.7.9与system.data.sqlite.dll版本1.0.77.0

EDIT2:我认为我与160位演员的不同之处在于他们可以选择单独的唱片或小范围的唱片.但是我必须在表中加载所有2700万行,将它们与另一个表连接起来,按照用户的要求对记录进行分组并返回结果.有什么输入是为这些结果优化数据库的最佳方法.

我不能缓存先前查询的结果,因为它在我的情况下没有意义.点击缓存的可能性相当低.

jef*_*unt 5

这里有很多要考虑的问题,但是我的第一点建议是不要以他人的面值看待绩效统计。数据库性能取决于很多因素,包括数据库的结构,查询的复杂性,已定义(或未定义)的索引,以及其中通常只包含大量数据。报告的许多性能数字来自大量的反复试验,和/或使数据库与手头的工作相匹配。换句话说,除非您的数据集和结构几乎完全相同,否则您无法从任何DBMS获得的性能都可以与其他应用程序的性能进行明确比较-它们当然是指南,并且也许是努力追求的理想选择,但您不一定要“开箱即用”地获得出色的性能。

作为起点,我将开始为那些非常大的表(从注释中看,您已经知道的)上的数据建立索引,然后看看会发生什么。当然,要花费四分钟的时间是很长的时间,但不要到此为止。添加一些索引,对其进行更改,询问是否要存储不需要存储的数据,并查看其他数据库查询(而不仅仅是count查询)来判断性能。查找其他使用SQLite进行大量行处理的应用和博客文章,并查看他们为解决该问题所做的工作(其中可能包括更改数据库)。基本上,尝试一些东西-然后做出判断。不要让最初的恐惧阻止您,以为您走错了路。也许您是,也许您不是,但不要只是停下来COUNT查询。无论如何分割,表中的2700万条记录都是垃圾。

最后,一条具体的建议是:在SQLite中,不要将数据库拆分成多个文件-我看不到有什么帮助,因为那样的话,您将不得不做很多额外的查询工作,并且然后在多个查询返回结果后,手动连接单独的表。这是在重新定义RDBMS为您所做的工作,这是一个疯狂的想法。您不会以某种方式找到比RDBMS系统的创建者更快的加入联接的方法-您肯定会在那里浪费时间。