【发布时间】:2018-06-04 04:31:27
【问题描述】:
所以我将 JSON 文件导入 SQLite 数据库。起初,我将 JSON 对象导入到一个看起来有点像这样的表中:
CREATE TABLE table_name (
column1 STRING,
column2 STRING,
column3 STRING,
column1 STRING,
column2 INT,
column3 STRING,
);
由于某种原因,程序导入数据需要很长时间(JSON 文件非常大),所以我正在研究减少导入时间的选项。我在表上添加了这样的约束:
CREATE TABLE table_name (
column1 NOT NULL PRIMARY KEY,
column2 NOT NULL,
column2 NULL,
column2 TEXT NULL,
column3 INT NOT NULL,
column2 NOT NULL,
);
突然之间,导入 JSON 的时间几乎减少了一半。那么我的问题是为什么导入时间有所改善?约束不只是假设保持数据库“安全”或定义一些业务逻辑吗?
【问题讨论】:
-
你是如何插入行的? SQLite 对 VARCHAR(10) 的处理与对 STRING 的处理没有任何不同。唯一的主键也是多余的,因为主键已经是唯一的。而 NOT NULL 只会导致它在允许插入成功之前检查列值是否不为 NULL。这些都不能解释您报告的差异。
-
@DanD。是的,你是对的,所以我删除了 VARCHAR (更新的问题,还添加了所有列类型)。尽管如此,它仍然通过添加 NOT NULL 等约束来缩短导入时间。
-
@DanD。我正在为两个示例执行相同的行插入语法
-
我认为 Sqlite 中不存在数据类型
STRING。而且您将很难创建重复的列名。所以我们不得不说一下代码之间的区别,两者都不会运行。