我在应用程序中使用SQLite数据库存储测量数据。
它是在项目中分组组织的。这些表与ON DELETE CASCADE用于处理链接的外键互连。该数据库如下所示:
ON DELETE CASCADE
所有外键引用列的声明如下
project_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT。
project_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
外键这样声明
FOREIGN KEY(project_id) REFERENCES Projects(project_id) ON DELETE CASCADE
现在,我有1个项目,该项目中有1个组,该组中有800个文件,每个文件约有60个数据点。
删除群组的方法DELETE FROM Groups WHERE project_id=1效果很好,但大约需要21秒,对于我的需求而言,这太长了。
DELETE FROM Groups WHERE project_id=1
我已将删除内容包装在交易中。
我是SQL和SQLite的极端新手。这个持续时间是正常的还是有什么办法可以加快速度?我需要删除组以填写更新的值。在我的应用程序中,我只想在内存中保留一个项目,因此,仅删除整个数据库并从头开始填充它(虽然速度更快,大约需要1秒),实际上不是一个选择。
这些表是这样创建的:
'Create projects table cmd.CommandText = "CREATE TABLE IF NOT EXISTS Projects ( ProjectID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " & _ "name TEXT NOT NULL, comment TEXT, date DATETIME2, diameter FLOAT(53), thickness FLOAT(53) );" 'Create Groups table cmd.CommandText &= vbNewline & "CREATE TABLE IF NOT EXISTS Groups ( GroupID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL, " & _ "name TEXT NOT NULL, text TEXT NOT NULL, fixed TINYINT NOT NULL, " & _ "FOREIGN KEY(project_id) REFERENCES Projects(ProjectID) ON DELETE CASCADE );"
该文档说:
子键列不需要索引,但是它们几乎总是有益的。