小编Mar*_*arc的帖子

SQLite:大表上COUNT慢

我在SQLite中遇到性能问题,在大型表上使用SELECT COUNT(*).

由于我还没有收到有用的答案,我做了一些进一步的测试,我编辑了我的问题以纳入我的新发现.

我有2张桌子:

CREATE TABLE Table1 (
Key INTEGER NOT NULL,
... several other fields ...,
Status CHAR(1) NOT NULL,
Selection VARCHAR NULL,
CONSTRAINT PK_Table1 PRIMARY KEY (Key ASC))

CREATE Table2 (
Key INTEGER NOT NULL,
Key2 INTEGER NOT NULL,
... a few other fields ...,
CONSTRAINT PK_Table2 PRIMARY KEY (Key ASC, Key2 ASC))
Run Code Online (Sandbox Code Playgroud)

Table1有大约800万条记录,Table2有大约5100万条记录,数据库文件超过5GB.

Table1还有2个索引:

CREATE INDEX IDX_Table1_Status ON Table1 (Status ASC, Key ASC)
CREATE INDEX IDX_Table1_Selection ON Table1 (Selection ASC, Key ASC)
Run Code Online (Sandbox Code Playgroud)

"状态"是必填字段,但只有6个不同的值,"选择"不是必需的,只有大约150万个值与null不同,只有大约600k个不同的值.

我在两个表上做了一些测试,你可以看到下面的时间,我为每个请求(QP)添加了"解释查询计划".我将数据库文件放在USB记忆棒上,这样我就可以在每次测试后将其删除,并获得可靠的结果,而不会干扰磁盘缓存.有些请求在USB上更快(我想由于缺少搜索时间),但有些请求更慢(表扫描).

SELECT COUNT(*) FROM …
Run Code Online (Sandbox Code Playgroud)

sql database sqlite performance

31
推荐指数
3
解决办法
2万
查看次数

标签 统计

database ×1

performance ×1

sql ×1

sqlite ×1