SQLITE多列索引与单列索引

时间:2013-12-23 10:23:39

标签: sql sqlite indexing

有人可以告诉我是否使用以下SQLite语句..

CREATE TABLE products (
  category_id INT  NOT NULL, /* foreign key on `categories` */
  product_id  TEXT NOT NULL, /* must be string, unique only within a category */
  info        TEXT,
  PRIMARY KEY (category_id, product_id) /* our PK */
  ) WITHOUT ROWID

...如果我仍然应该构建以下索引

CREATE INDEX products_by_category_id
  ON products(category_id)
CREATE INDEX products_by_product_id
  ON products(product_id) /* not sure I need this one at all */

或者由于CREATE TABLE

中的多列PK INDEX定义,这是多余的

1 个答案:

答案 0 :(得分:1)

是的,这是多余的。

可以从左到右使用索引列。例如。 PK索引可以单独与category_idcategory_idproduct_id一起使用。因此,category_id上的索引无效,而product_id上的索引可能非常有用,如果您的查询过滤product_id而不是category_id