SQLite中的外键优化

bal*_*pha 18 sqlite indexing foreign-keys query-optimization

我知道SQLite本身并不强制执行外键,但这不是我主要关注的问题.问题是:如果我宣布

CREATE TABLE invoice (
  invoiceID INTEGER PRIMARY KEY,
  clientID INTEGER REFERENCES client(clientID),
  ...
  )
Run Code Online (Sandbox Code Playgroud)

sqlite至少会使用clientID是外键的信息来优化查询并自动索引invoice.clientID,还是这个约束是真正的无操作?

Mas*_*sci 30

即使它实际上不是no-op(描述约束的数据结构被添加到表中),外键相关语句也不会在涉及的列上创建任何索引.仅在PRIMARY KEY和UNIQUE语句的情况下隐式创建索引.有关更多详细信息,请在sqlite源代码树上查看build.c模块:http://www.sqlite.org/cvstrac/rlog?f = sysite/src/build.c


小智 26

SQLite文档中,它说:

..."应在每个外键约束的子键列上创建索引"

即.索引不会自动创建,但您应该在每个实例中创建一个.

  • @Mark他们解释说:_每次应用程序从艺术家表(父表)中删除一行时,它都会执行与以下 SELECT 语句等效的操作来搜索轨道表(子表)中的引用行。_ (2认同)