主键的性能问题

时间:2016-03-30 18:27:01

标签: sqlite

我正在填充一张中型桌子(60GB,5亿行)。如果表没有主键(使用批量插入约1小时),则该过程可以相当快地完成,但如果使用主键创建该表,则需要大约10倍的时间。我假设这是因为验证唯一性约束需要时间,并且还要更新每个插入的索引。

我认为一个好的解决方法是稍后添加主键,因为与增量索引相比,已经填充的表上的索引应该快得多。但sqlite似乎没有选择在创建表后添加主键(不知道为什么?)。

我想我根本不能使用主键,而只是在填充表后添加唯一索引。这有什么不利之处吗?

或推荐任何更好的解决方案?

2 个答案:

答案 0 :(得分:1)

从纯技术角度来看,唯一索引与主键具有完全相同的效果。 (在SQLite中,一些主键允许NULL以便向后兼容。)

唯一的区别是主键约束没有出现在表定义本身中,这对于文档来说可能是一件坏事。

另见Is CREATE UNIQUE INDEX or INTEGER PRIMARY KEY more performant in SQLite

答案 1 :(得分:0)

在事务中运行批量插入,你会避免一些缓慢插入的事情。

我刚刚发现这是关于如何在sqlite3中加快速度的一篇很好的文章。

Improve INSERT-per-second performance of SQLite?