我有一个SQLite数据库并且正在使用INSERT OR IGNORE
查询。我有一个表自动增量int作为主键和另一个唯一列。我的问题是,SQLite如何检查记录是否已经存在,以便它知道是否忽略它?它首先扫描主键,然后扫描任何其他唯一列吗?如果是这样,它可以比较某些查询的主键之前的唯一列吗?如果列是唯一的,它是否已编入索引?
答案 0 :(得分:2)
使用索引实现UNIQUE约束,因此UNIQUE列已经编入索引。
在评估INSERT或IGNORE时,如果INSERT语句违反了表中的任何 UNIQUE约束,则使用OR IGNORE。从功能的角度来看,评估的顺序并不重要,应该对性能影响很小。据推测,评估的顺序由查询优化器处理,但如果不是,则性能匹配应该很小。
答案 1 :(得分:1)
根据您想要的深度,我可能会推荐downloading the SQLite3 source code,并开始在其中搜索“唯一”和“约束”等字词 - 您可以通过阅读只需几分钟即可获得。
代码似乎异常详细记录。如果你要大量使用SQLite,那么至少阅读所提供的评论可能并不是一个坏主意。我敢打赌,你可能会从中得到更多的洞察力。