2

我有一个 SQLite 数据库并且正在使用该INSERT OR IGNORE查询。我有一个表,它的主键是自动递增的 int,还有另一个唯一的列。我的问题是,SQLite 如何检查记录是否已经存在,以便知道是否忽略它?它是否先扫描主键,然后再扫描任何其他唯一列?如果是这样,它是否可以比较某些查询的主键之前的唯一列?此外,如果一列是唯一的,它是否已经被索引?

4

2 回答 2

2

UNIQUE 约束是使用索引实现的,因此 UNIQUE 列已经被索引。

在评估 INSERT OR IGNORE 时,如果表中的任何UNIQUE 约束将被 INSERT 语句违反,则使用 OR IGNORE 代替。从功能的角度来看,评估的顺序并不重要,应该对性能产生很小的影响。据推测,评估顺序由查询优化器处理,但如果不是,那么性能损失应该很小。

于 2012-10-03T18:17:15.687 回答
1

根据您想深入了解的程度,我可能会建议您下载 SQLite3 源代码,然后开始在其中搜索“唯一”和“约束”等术语 - 只需阅读源代码即可提供您问题的一些答案几分钟。

该代码似乎有很好的文档记录。如果你打算大量使用 SQLite,至少阅读提供的评论可能不是一个坏主意。我敢打赌,您会从中获得比您预期的更多的洞察力。

于 2012-10-03T18:19:02.447 回答