复合键的索引是否足够?

Ale*_*lex 4 sql sqlite indexing performance composite-key

这就是我的表格:

CREATE TABLE pics(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT,
  page INTEGER,
  w INTEGER,
  h INTEGER,
  FOREIGN KEY(page) REFERENCES pages(id) ON DELETE CASCADE,
  UNIQUE(name, page)
);

CREATE INDEX "myidx" ON "pics"("page");  # is this needed?
Run Code Online (Sandbox Code Playgroud)

所以UNIQUE(name, page)应该创建一个索引.但是这个索引是否足以进行page仅涉及该字段的快速查询?就像选择一组"照片"一样WHERE page = ?.还是JOIN pages.id ON pics.page?或者我应该只为页面字段创建另一个索引(myidx)?

Mic*_*eyn 6

如上所述,您将需要您的其他myidx索引,因为您的UNIQUE索引name首先指定.换句话说,它可以用于查询:

  1. name
  2. namepage
  3. 不是page一个人.

您的另一个选择是重新排序UNIQUE索引并将page列放在第一位.然后它只能用于page查询,但只会与name查询不兼容.